vllm 通过不同的chat_template推理部署常见qwen、chatglm、llama3等开源大模型
vllm官网地址:Installation — vLLM
vllm 版本 4.0.0
镜像 vllm github 官方镜像
gpu v100 32g a800 80g
openai api 方式
出现的问题通过 chat-template 聊天模板解决
1 推理部署qwen系列模型
测试 我是谁
问题:回答内容含有分词符,回答有杂论冗余内容
模型文件没有默认聊天模板
vllm 官方也没有
聊天模板找不到
不过可以通过指定stop 入参 '<|im_start|>' 解决
2 推理部署qwen1.5系列模型
执行python: CUDA_VISIBLE_DEVICES=1 python -m vllm.entrypoints.openai.api_server --model /model/Qwen1___5-14B-Chat-AWQ --chat-template ./template_qwen.jinja --tensor-parallel-size 1 --host=192.168.1.120 --port=8888 --served-model-name qwen --quantization awq --tokenizer-mode auto --max-model-len 4096
vllm 推理自动加载了模型里面默认的chat-template
"chat_template": "{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\nYou are a helpful assistant<|im_end|>\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}"
3 推理部署chatglm3-6b模型
模型文件一开始也没有聊天模板
后面更新才有的
"chat_template": "{% for message in messages %}{% if loop.first %}[gMASK]sop<|{{ message['role'] }}|>\n {{ message['content'] }}{% else %}<|{{ message['role'] }}|>\n {{ message['content'] }}{% endif %}{% endfor %}{% if add_generation_prompt %}<|assistant|>{% endif %}"
4 推理部署baichuan2系列模型
模型文件没有聊天模板
在vllm github代码上面找的
{%- for message in messages -%}
{%- if message['role'] == 'user' -%}
{{- '<reserved_106>' + message['content'] -}}
{%- elif message['role'] == 'assistant' -%}
{{- '<reserved_107>' + message['content'] -}}
{%- endif -%}
{%- endfor -%}
{%- if add_generation_prompt and messages[-1]['role'] != 'assistant' -%}
{{- '<reserved_107>' -}}
{% endif %}"
docker run -ti --rm --gpus='"device=5"' -p30011:30011 -v /home/model/Baichuan2-13B-Chat:/data/mlops/model 3b8966176bfc --model /data/mlops/model --served-model-name baichuan2-13b-chat --host 0.0.0.0 --port 30011 --trust-remote-code --dtype half --tensor-parallel-size 1 --chat-template "{{ (messages|selectattr('role', 'equalto', 'system')|list|last).content|trim if (messages|selectattr('role', 'equalto', 'system')|list) else '' }}\n{%- for message in messages -%}\n {%- if message['role'] == 'user' -%}\n {{- '<reserved_106>' + message['content'] -}}\n {%- elif message['role'] == 'assistant' -%}\n {{- '<reserved_107>' + message['content'] -}}\n {%- endif -%}\n{%- endfor -%}\n\n{%- if add_generation_prompt and messages[-1]['role'] != 'assistant' -%}\n {{- '<reserved_107>' -}}\n{% endif %}"
5 推理部署llama3系列模型
llama3 模型里面有聊天模板,但是部署出来没有生效
根据 vllm GitHub issue 里面的信息,将模型里面的文件tokenizer_config.json的eos_token 更改为eot_id 可以解决问题
模型发布是2024年4月19日,vllm GitHub 官方根据llama3(号称最强开源模型)的一些问题很快就发布在2024年4月24日就发布了4.0.1版本
6 常见问题,一般都是oom max-len 数值大于 cv
可以通过 调大 --gpu-momery-utilization 0.95 默认0.9 减少 --meax-model-len --max-num-seqs 128 等等 牺牲一点推理速度和prompt输入长度
或者找一些量化版本模型 qwen1.5-32b-chat-gptq-int4