大模型推理实践
·
rag系列文章目录
前言
最近两年大模型很火,它在各个行业的应用也在逐渐推进。作为一个开发人员,学会推理部署大模型,是必要的,今天主要说下大模型推理以及部署。
一、环境准备
首先,你需要在算力服务器平台,租借一个GPU服务器,这里不在赘述。
然后,在服务器上面安装依赖。
1、 创建conda环境
conda create -n qwen_infer python=3.10 -y
# 激活环境
conda activate qwen_infer
2、 安装基础依赖
# 安装 PyTorch(确保匹配 CUDA 版本)
# 安装 CUDA 12.1 兼容的 PyTorch
pip install torch --index-url https://download.pytorch.org/whl/cu121
# 安装 vLLM(高性能推理框架)
pip install vllm
# 安装 Hugging Face Transformers
pip install transformers accelerate
# 其他常用工具
pip install sentencepiece bitsandbytes
3、 验证
# 测试GPU是否可以使用
python -c "import torch; print(torch.cuda.is_available(), torch.version.cuda, torch.cuda.get_device_name(0))"
最后,下载大模型,在huggingface上面下载Qwen2.5-0.5B,然后上传到服务器,本次测试服务器使用V100英伟达服务器。
二、本地推理
搭建vscode开发环境,这里使用remote ssh连接到GPU服务器,并且配置服务器上面的python解释器,也就是上面安装的conda环境。
Vscode环境搞好之后,执行代码如下:
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
# 模型路径
model_path = "qwen-model/models"
# 初始化 tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
# 构建 SamplingParams(用于控制生成)
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.8,
repetition_penalty=1.05,
max_tokens=512
)
# 初始化 vLLM 的 LLM 实例(注意 trust_remote_code)
llm = LLM(model=model_path, dtype="float16", trust_remote_code=True)
# 构造多轮对话(chat 模式)
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "给我介绍一下大型语言模型。"}
]
# 构造 prompt(text prompt for vLLM)
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True # 让它留出回答空间
)
print("Prompt:", prompt)
# 执行推理
outputs = llm.generate(prompt, sampling_params)
# 输出结果
print("模型回复:", outputs[0].outputs[0].text)
可以从日志中看出来,调用大模型组装使用的prompt如下:
Prompt: <|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
给我介绍一下大型语言模型。<|im_end|>
<|im_start|>assistant
模型生成的结果如下:
模型回复: 大型语言模型是一种能够模拟人类语言的计算机程序,它可以生成人类语言文本,从而帮助人们完成各种任务,例如回答问题、提供建议、创作诗歌等。大型语言模型通常使用深度学习技术,通过大量的训练数据和大量的参数调整来提高模型的性能。
三、服务器推理
使用vllm推理命令如下:
python -m vllm.entrypoints.api_server --model qwen-model/models --tensor-parallel-size 1 --host 0.0.0.0 --served_model_name qwen
日志打印,显示有如下接口,可以供调用:
INFO 09-14 15:31:00 [launcher.py:36] Available routes are:
INFO 09-14 15:31:00 [launcher.py:44] Route: /openapi.json, Methods: HEAD, GET
INFO 09-14 15:31:00 [launcher.py:44] Route: /docs, Methods: HEAD, GET
INFO 09-14 15:31:00 [launcher.py:44] Route: /docs/oauth2-redirect, Methods: HEAD, GET
INFO 09-14 15:31:00 [launcher.py:44] Route: /redoc, Methods: HEAD, GET
INFO 09-14 15:31:00 [launcher.py:44] Route: /health, Methods: GET
INFO 09-14 15:31:00 [launcher.py:44] Route: /generate, Methods: POST
INFO: Started server process [6836]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
推理接口调用示例:
curl -X POST http://127.0.0.1:8000/generate \
-H "Content-Type: application/json" \
-d '{
"prompt": "<|im_start|>system\nyou are a helpful assistant.<|im_end|>\n<|im_start|>user\n给我介绍一下大型语言模型。<|im_end|>\n<|im_start|>assistant",
"max_tokens": 200,
"temperature": 0.7
}'
模型响应如下:
{"text":["<|im_start|>system\nyou are a helpful assistant.<|im_end|>\n<|im_start|>user\n给我介绍一下大型语言模型。<|im_end|>\n<|im_start|>assistant大型语言模型是一种可以处理大规模文本的计算机程序,它能够从大量的文本中学习知识,并将其应用于各种自然语言处理任务,如文本分类、语义分析、机器翻译等。它们可以使用各种技术,如深度学习、神经网络和强化学习,来达到更高的准确率。"]}
总结
本文以qwen2.5-0.5B模型为例,介绍了它的本地调试过程,同时也介绍了它的模型部署过程,介绍过程比较简单。大模型推理过程这里还有很多可以做的,比如有些深度思考模型,思考内容和正文在一个字段的,可以在推理层,将两者分开。此外,如果需要适配其他硬件GPU,还需要对vllm源码进行改造等等。
更多推荐




所有评论(0)