一、ChatGLM3的几种推演方式
ChatGLM3常规方案的GPU推演中half和float是两种最常用的格式,half格式占13GB显存,float格式占40GB显存。此外还提供了几种GPU量化格式的推演:INT4和INT8量化。
CPU版本的ChatGLM3推演:
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).cpu().float()
INT4版本的ChatGLM3推演:(不是所有的硬件都支持INT4操作)
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).quantize(4).cuda()
INT8版本的ChatGLM3推演:
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).quantize(8).cuda()
half版本的ChatGLM3推演:
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).half().cuda()
float版本的ChatGLM3推演:
model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).float().cuda()
二、多卡推演
由于高精度的float推演形式需要较大的显存(40G),往往一张显卡很难满足其生产力需求,这时我们就可以使用多张显卡同时进行推演运算,而实现多卡推演的方式其实也特别简单。我们在这采取最简单的一种方式,就是在上述代码中加上一句device_map="auto"
就可以了。
例:
model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="auto").float()
这时我们将float量化的模型启动起来,新建一个terminal窗口输入nvidia-smi -l 2
便可查看各显卡的使用情况:
nvidia-smi -l 2
就可以看到三张显卡都自动分配运行起来了以满足40G的运存要求: