LLM 开发
下载、运行、微调和调用大语言模型。
示例展示基础流程;安装这些工具应使用独立 Python 环境,不需要装入本站的 MkDocs 环境。
基础条目参考:Hugging Face CLI、Transformers 生成文档、PEFT 入门、vLLM serve、vLLM 对话 API。
模型下载与缓存
从 Hugging Face 下载模型,设置镜像站和缓存目录。
下载一个小模型到指定目录
hf download HuggingFaceTB/SmolLM2-135M-Instruct --local-dir ./models/smollm2
- 助记:
hf指 Hugging Face,download= 下载;local-dir = 本地目录,模型名的最后一段是仓库名。 - 作用:需要 huggingface_hub 提供的 hf 命令和网络;模型名仅作示例。
为一次下载指定缓存目录
HF_HOME="$HOME/.cache/huggingface-demo" hf download HuggingFaceTB/SmolLM2-135M-Instruct
- 助记:
HF_HOME指 Hugging Face 数据与缓存的根位置;命令前的变量赋值只传给这次启动的进程。 - 作用:不改变后续终端命令的缓存配置;未加 --local-dir 时存入缓存。
Transformers 推理
用 AutoTokenizer、AutoModelForCausalLM 加载模型,generate 生成文本,套用对话模板。
用对话模板生成文本
tokens = model.generate(**inputs, max_new_tokens=64, do_sample=False)
- 助记:
tokenizer把文本转成 token(词元)编号;chat template 格式化对话,generate 生成编号,decode 还原文本。 - 作用:需要 torch 与 transformers;示例默认在 CPU 运行,首次运行会下载模型。对话模板由模型 tokenizer 提供。
- 使用前提:先加载 model 和 tokenizer,用对话模板与 tokenizer 生成 inputs;生成后再解码 token。准备流程见下方。
解释性示例:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "HuggingFaceTB/SmolLM2-135M-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
model.eval()
messages = [{"role": "user", "content": "Explain what a robot is."}]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt", add_special_tokens=False)
with torch.inference_mode():
tokens = model.generate(**inputs, max_new_tokens=64, do_sample=False)
new_tokens = tokens[0, inputs["input_ids"].shape[1]:]
print(tokenizer.decode(new_tokens, skip_special_tokens=True))
微调(LoRA)
用 PEFT 做 LoRA 微调,合并和保存权重。
为因果语言模型配置 LoRA
model = get_peft_model(model, config)
- 助记:
LoRA← Low-Rank Adaptation(低秩适配),PEFT← Parameter-Efficient Fine-Tuning(参数高效微调);r 是低秩矩阵的秩。 - 作用:需要 peft,并先加载上一节的 model;目标层名称按模型结构调整。这一步只配置可训练参数,尚未训练。
- 使用前提:先从 peft 导入 get_peft_model,准备基础 model 和 LoraConfig;配置字段见下方示例。
解释性示例:
from peft import LoraConfig, get_peft_model
config = LoraConfig(
task_type="CAUSAL_LM", r=8, lora_alpha=16,
lora_dropout=0.05, target_modules=["q_proj", "v_proj"],
)
model = get_peft_model(model, config)
model.print_trainable_parameters()
推理服务(vLLM)
用 vLLM 启动兼容 OpenAI 接口的推理服务。
启动仅监听本机的模型服务
vllm serve ./models/smollm2 --host 127.0.0.1 --port 8000 --served-model-name demo
- 助记:
LLM← large language model(大语言模型);serve = 提供服务,host = 监听地址,served-model-name = 接口使用的模型名。 - 作用:先下载模型,并在符合 vLLM 安装与硬件要求的环境执行;默认上下文、显存等参数按设备调整。
查看服务公开的模型名称
curl http://127.0.0.1:8000/v1/models
- 助记:
/v1/models是模型列表端点;端点返回的 id 才是客户端请求里应填写的 model 名。 - 作用:在服务启动后执行;请求中的模型名应与返回的 ID 一致。
调用模型 API
用官方 SDK 调用在线大模型接口,读取环境变量里的密钥。
向本地模型服务发送对话请求
curl http://127.0.0.1:8000/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"demo","messages":[{"role":"user","content":"Hello"}],"max_tokens":64}'
- 助记:
API← application programming interface(应用编程接口);chat completions 表示对话生成,messages 是角色与文本的列表。 - 作用:对应上一节的本机 vLLM 服务,需模型提供对话模板;在线服务的地址、认证与字段按其官方文档配置。
- 使用前提:这是一条 HTTP 请求;下方保留分行写法帮助读清请求头与数据。
解释性示例:
curl http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"demo","messages":[{"role":"user","content":"Hello"}],"max_tokens":64}'