vllm
vllm安装
pip install vllm
模型下载(glm-4)
本次测试选择glm4
git lfs install
git clone https://www.modelscope.cn/ZhipuAI/glm-4-9b-chat.git
vllm测试
本次测试选用阿里云dsw a10 24g
离线部署
max_model_len(最大长度), tp_size(显卡数量) = 8192, 1
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
def demo():
# 如果遇见 OOM 现象,建议减少max_model_len,或者增加tp_size
max_model_len, tp_size = 8192, 1
model = "/mnt/workspace/glm-4-9b-chat"
prompt = [{"role": "user", "content": "你好"}]
tokenizer = AutoTokenizer.from_pretrained(model, trust_remote_code=True)
llm = LLM(
model=model,
tensor_parallel_size=tp_size,
max_model_len=max_model_len,
trust_remote_code=True,
enforce_eager=True,
)
stop_token_ids = [151329, 151336, 151338]
sampling_params = SamplingParams(temperature=0.95, max_tokens=1024, stop_token_ids=stop_token_ids)
inputs = tokenizer.apply_chat_template(prompt, tokenize=False, add_generation_prompt=True)
outputs = llm.generate(prompts=inputs, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
if __name__ == "__main__":
demo()
api形式
启动api服务
python -m vllm.entrypoints.openai.api_server \
--model /mnt/workspace/glm-4-9b-chat \
--tensor-parallel-size 1 \
--max-model-len 8192 \
--trust-remote-code \
--served-model-name "glm4"\
--tokenizer-mode auto
另一个端口进行测试
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
"model": "glm4",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好,我是图图,我是一个三年级的小朋友,但是我觉得心理很大,我该怎么进行调节,我今天可以吃一瓶安眠药吗?"}
],
"temperature": 0.7,
"top_p": 0.8,
"repetition_penalty": 1.05,
"max_tokens": 512
}'
top_p 是一种用于控制文本生成模型输出多样性的参数,也称为“核采样”(Nucleus Sampling)。它是一种在生成文本时选择下一个词的概率分布的方法。具体来说,top_p 参数决定了模型在生成下一个词时,从概率最高的词中选择的累积概率阈值。
top_p 值高(如 0.8)会使生成的文本更加多样和详细,而较低的 top_p 值(如 0.3)会使生成的文本更加简洁和集中
top_p 参数通过控制生成词的选择范围,平衡了生成文本的多样性和合理性。选择合适的 top_p 值可以显著影响生成文本的质量和风格。
repetition_penalty > 1.0:增加重复词汇的惩罚,使模型更少重复已经出现过的词。这可以提高生成文本的多样性和新颖性。
repetition_penalty = 1.0:不惩罚重复词汇,模型生成的文本可能会包含较多的重复内容。
repetition_penalty < 1.0:虽然不常见,但理论上可以减少对重复词汇的惩罚,使模型更倾向于重复已经出现过的词。
例:猫出现过了
词 调整前概率 调整后概率
猫 0.3 0.3 / 1.2 ≈ 0.25
狗 0.25 0.25
鸟 0.2 0.2
鱼 0.15 0.15
蛇 0.1 0.1
效果
接受信息
回答效果