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源码进行改造等等。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐