chatglm3部署

下载模型 ,先创建目录 chatglm3

先部署,用egal-get 下载模型文件, 小文件用浏览器下载,大文件用egal-get下载,这个时候要验证下载的SHA256

在window里面,调用 certutil -hashfile 文件名 SHA256 进行查看,查看完了,都没有问题

环境部署

接下来是部署,部署很简单,上去运行gunicorn,或者直接运行官方的py也行,因为我只想研究function call,所以不想在部署上花时间,所以就是普通的部署就行了。

如果要达到普通的部署,需要pycharm进入服务器,部署pycharm

查看pycharm 远程服务: https://blog.csdn.net/qq_44614026/article/details/118109014

很简单,就是使用pycharm的tool,配置服务器用户名密码,然后最重要的配置mapping,把服务器某个目录映射到本机某个目录下面,然后过一会在project那边上传代码,或者下载代码即可。

修改路径

怎么进行普通的部署?,当前这个部署失败是因为path不对

MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
PT_PATH = os.environ.get('PT_PATH', None)
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)

这段代码通过os.environ.get获取了三个变量,这里做了什么

其实就是os.envrion.get(xxx, default), 如果没有这类环境变量就直接返回默认值

于是设置了模型所在的目录,作为MODEL_PATH

把TOKENIZER_PATH也设置为模型所在的目录

在composite_demo运行streamlit run main.py即可

依赖问题

但是有可能stream版本不对,需要运行 pip install streamlit==版本号,下载一个最新的streamlit的版本。

先普通的部署,对tool_using进行测试,测试问题得等等看,完成了部署了。

量化部署

model = AutoModel.from_pretrained("THUDM/chatglm3-6b",trust_remote_code=True).quantize(4).cuda()

大概6b的参数占的内存*2 + 1, 大概就是13GB

如果没有量化的话,那就是17GB

多卡且指定卡部署

from utils import load_model_on_gpus

model = load_model_on_gpus("THUDM/chatglm3-6b", num_gpus=2)

你也可以传入 device_map 参数来自己指定,在chatglm3的openai_api_demo的utils.py文件里,有一个函数auto_configure_device_map,里面的device_map是一个字典

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

在这里可以选择层数与gpu卡号进行绑定,其中的transformer.encoder.layers.0,1,2,3… 可以设置到gpu不同的卡号上面。