听闻大名,说了拿下了中文榜单第一名:ChatGLM-6B第二代模型开源,拿下LLM模型中文能力评估榜单第一名
排行榜原地址:https://cevalbenchmark.com/static/leaderboard_zh.html
ChatGLM2-6B 支持
- FP16,最厉害,但是需要的资源也最多
- int8,中庸
- int4,最笨,但是资源也最少
FP16 火力全开
多卡互联
我有两个 M60,各是 8GB 的显存。因为跑 FP16 需要 12.5GB 的显存,所以必须上两个卡
代码如下:
from transformers import AutoTokenizer, AutoModel
import os
from typing import Dict, Tuple, Union, Optional
from torch.nn import Module
from transformers import AutoModel
def auto_configure_device_map(num_gpus: int) -> Dict[str, int]:
# transformer.word_embeddings 占用1层
# transformer.final_layernorm 和 lm_head 占用1层
# transformer.layers 占用 28 层
# 总共30层分配到num_gpus张卡上
num_trans_layers = 28
per_gpu_layers = 30 / num_gpus
# bugfix: 在linux中调用torch.embedding传入的weight,input不在同一device上,导致RuntimeError
# windows下 model.device 会被设置成 transformer.word_embeddings.device
# linux下 model.device 会被设置成 lm_head.device
# 在调用chat或者stream_chat时,input_ids会被放到model.device上
# 如果transformer.word_embeddings.device和model.device不同,则会导致RuntimeError
# 因此这里将transformer.word_embeddings,transformer.final_layernorm,lm_head都放到第一张卡上
# 本文件来源于https://github.com/THUDM/ChatGLM-6B/blob/main/utils.py
# 仅此处做少许修改以支持ChatGLM2
device_map = {
'transformer.embedding.word_embeddings': 0,
'transformer.encoder.final_layernorm': 0,
'transformer.output_layer': 0,
'transformer.rotary_pos_emb': 0,
'lm_head': 0
}
used = 2
gpu_target = 0
for i in range(num_trans_layers):
if used >= per_gpu_layers:
gpu_target += 1
used = 0
assert gpu_target < num_gpus
device_map[f'transformer.encoder.layers.{i}'] = gpu_target
used += 1
return device_map
def load_model_on_gpus(checkpoint_path: Union[str, os.PathLike], num_gpus: int = 2,
device_map: Optional[Dict[str, int]] = None, **kwargs) -> Module:
if num_gpus < 2 and device_map is None:
model = AutoModel.from_pretrained(
checkpoint_path, trust_remote_code=True, **kwargs).half().cuda()
else:
from accelerate import dispatch_model
model = AutoModel.from_pretrained(
checkpoint_path, trust_remote_code=True, **kwargs).half()
if device_map is None:
device_map = auto_configure_device_map(num_gpus)
model = dispatch_model(model, device_map=device_map)
return model
tokenizer = AutoTokenizer.from_pretrained(
"THUDM/chatglm2-6b", trust_remote_code=True)
model = load_model_on_gpus("THUDM/chatglm2-6b", num_gpus=2)
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
# response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
# print(response)
看看效果
Q:爸爸的爸爸叫什么?
A:
爸爸的爸爸叫爷爷。
Q:华雄为什么要斩关羽
A:
华雄斩关羽的背景是董卓联合吕布等人,共同反董。当时,董卓指使吕布等人去进攻刘备的部队。刘备的将领华雄与吕布激战,华雄最终击败了吕布。之后,华雄在追杀刘备的部队时,被关羽所杀。
Q:用 python 写一段代码,要求使用 requests 库上传图片到服务端
A:
好的,以下是一段使用 requests 库上传图片到服务端的 Python 代码示例:
import requests # 上传图片的文件名和存储图片的路径 file_name = "example.jpg" file_path = "path/to/image.jpg" # 设置请求头部信息,例如:Content-Type 和 Authorization headers = { "Content-Type": "multipart/form-data", "Authorization": "Bearer YOUR_API_KEY" } # 打开图片文件并读取内容 with open(file_path, "rb") as f: img_data = f.read() # 发送图片内容到服务端 response = requests.post( "https://example.com/upload", files={"image": ("image.jpg", img_data, "image/jpeg")}, headers=headers ) # 打印服务器返回的结果 print(response.status_code) print(response.text)
在上面的代码中,我们首先定义了上传图片的文件名和存储图片的路径。然后设置请求头部信息,例如 Content-Type 和 Authorization。接着我们打开图片文件并读取内容,然后使用 requests.post 方法发送图片内容到服务端。在发送请求时,我们使用了 files 参数,将图片文件作为 Multipart/Form-Data 类型的文件上传到服务端。最后,我们打印服务器返回的结果和返回的文本内容。
请注意,在上面的示例中,我们将 Content-Type 设置为 "multipart/form-data",并将 Authorization 设置为 "Bearer YOUR_API_KEY"。这取决于您与服务端交互时所使用的身份验证方法。如果您的服务端要求使用身份验证,您需要根据其文档中的要求更改这些设置。
int8 ,中庸者
这部分有空再写
int4,穷鬼套餐
原始代码
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained(
"THUDM/chatglm2-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained(
"THUDM/chatglm2-6b-int4", trust_remote_code=True).float()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)
cpu 下的速度测试
因为我是穷鬼,我想看看这个 int4 模型在 cpu 下的速度
- 消耗的内存:5.3GB
- 消耗的 CPU:28 core cpu
我的 CPU:Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz
s=time.time()
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办")
print(response)
e=time.time()
logger.debug(f'pay time is {round(e-s,2)} 秒')
输出
以下是一些有助于快速入睡的技巧:
1. 创建一个放松的睡前环境。这包括一个安静、凉爽的卧室,以及舒适的床垫、枕头和床单。
2. 避免使用电子设备。在睡前几小时到睡前1小时之间,尽量避免使用手机、平板电脑、笔记本电脑等电子设备。
3. 规律的睡眠时间。尽量在同一时间上床和下床。
4. 放松身体和头脑。在睡前30分钟到1小时内,进行一些轻松的活动,如阅读、听轻柔的音乐或进行伸展运动,有助于缓解身体和头脑的压力。
5. 避免饮用刺激性饮料。在睡前2小时到1小时内,避免饮用咖啡、茶、酒和碳酸饮料等刺激性饮料。
6. 找到一个放松的睡前活动。进行一些感兴趣的活动,如练习瑜伽或冥想,有助于缓解压力和放松身心。
如果这些技巧不能解决你的问题,可以考虑咨询医生或睡眠专家,获取更深入的帮助。
2023-06-30 08:42:39.594 | DEBUG | __main__:<module>:25 - pay time is 1274.51 秒
太离谱了,这个回答用了 1274 秒,还是 28 个 cpu core 跑的结果
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。