AI
大模型重要参数
① temperature(随机性控制)
- temperature 影响模型的回答随机性:
- 低值(如 0.1-0.3) → 生成更加稳定、确定的回答(适合正式文档、技术说明)
- 高值(如 0.7-1.0) → 生成更有创造性、发散性的回答(适合创意写作、头脑风暴)
② top_p(核采样)
- top_p 控制生成时选取高概率词汇的范围:
- 低值(如 0.2-0.5) → 生成更保守、可靠的回答
- 高值(如 0.8-1.0) → 生成更有多样性、丰富的回答
- temperature 和 top_p 一般不要同时调高,以避免过度随机化
③ max_tokens(控制输出长度)
- 限制模型的回答长度,避免冗长:
- 例如,max_tokens=100 让模型的回答简短而直接
④ frequency_penalty & presence_penalty
- frequency_penalty:降低重复内容的概率
- presence_penalty:鼓励引入新词汇和概念
- 适当调整可以减少重复回答,提高内容的新颖性
大模型重要的技术
- Ollama [11434] 大模型容器化部署
- Xinference [9997] 多模态模型部署,兼容 OpenAI API 风格
- Open WebUI [8080] 本地大模型对话界面
- LLaMA-Factory [7860] 大模型训练框架
- Dify [3000] 大模型智能体平台
- Kiln [8757] 数据集生成,大模型微调
- llama.cpp 大模型 pytorch 格式转换 gguf 格式,兼容补全 OpenAI API 风格
- AI Gateway Cloudflare 提升人工智能(AI)应用程序可观察性、可靠性和可扩展性的服务
开发技术
- LangChain
- llama-cpp-python
服务器查看显卡使用情况
nvidia-smi
sudo apt install nvtop
nvtop
sudo apt install radeontop
radeontop
将训练好的大模型转换为 gguf 模型
- 安装 llama.cpp 框架
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make
pip install -r requirements.txt
- 把训练好的模型文件夹拷贝到
llama.cpp/models
,然后使用命令转换为 gguf 格式的模型:python convert-hf-to-gguf.py models/qwen2-7b
,该目录下就会生成ggml-model-f16.gguf
文件。
也可指定目录:python3 convert-hf-to-gguf.py snowflake-arctic-embed-s/ --outfile model-f16.gguf
- 对 gguf-f16 模型进行量化
./llama-quantize ./models/qwen2-7b/ggml-model-f16.gguf ./models/qwen2-7b/ggml-model-Q4_K_M.gguf Q4_K_M
- 运行gguf模型(只是普通测试能不能运行)
./llama-cli -m ./models/qwen2/Qwen2-494M-Q4_K_M.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f prompts/chat-with-bob.txt
Tip:也支持Embedding模型
运行基本嵌入测试
./llama-embedding -m model-f16.gguf -e -p "Hello world" --verbose-prompt -ngl 99
-ngl 99参数指定将模型的 99 层(即整个模型)卸载到 GPU。使用-ngl 0进行仅 CPU 计算
命令行下载大模型
huggingface-cli download --model [model_name]
modelscope download --model [model_name]
学习率
5e-5 = 0.00005
5 是系数(coefficient)。e 表示“乘以 10 的次方”(exponent)。-5 是指数(exponent),表示 10 的负 5 次方。
- 初始学习率建议:
- 1e-5 至 2e-5:通常,大型语言模型如Qwen2-7B,在微调任务上使用的初始学习率一般在这个范围内。这是因为较大的模型参数数量意味着更大的学习率可能导致训练不稳定。
-2e-5:如果这是你第一次微调该模型,这是一个常用的起点。
- 根据任务调整:
- 特定任务:如果任务较简单或数据集较小,可以尝试稍大一些的学习率(例如1e-4)。但如果任务复杂或数据集较大,可以使用较小的学习率(例如1e-6)。
- 微调 vs 从头训练:如果只是微调一个已经预训练的模型,通常较小的学习率(如1e-5至2e-5)是合适的。如果从头开始训练,可能需要较大的学习率。
- 使用学习率调节器:
- 余弦退火(Cosine Annealing):这种调节策略通常与小学习率结合使用,可以帮助模型在训练后期更稳定地收敛。
- 学习率Warm-up:对于像Qwen2-7B这样的大模型,建议在训练初期使用Warm-up策略,即从一个较小的学习率开始,逐渐增加到目标学习率,再开始标准的训练过程。
- 学习率选择的经验:
- 先进行实验:建议在训练开始时通过小规模实验来测试不同的学习率。例如,你可以在一个小的验证集上测试1e-5、2e-5和3e-5,看看哪个学习率能在不引起损失函数剧烈波动的情况下快速降低损失。
- 监控验证集的损失和准确度:在训练过程中,时刻监控验证集的损失和准确度,以确保模型没有过拟合或者欠拟合。
推理引擎
- Transformers:Hugging Face 提供的预训练模型加载和推理库,支持多种模型架构和推理优化。
- vLLM:高效并发推理引擎,专注于优化大模型推理性能。
- llama.cpp:轻量级推理引擎,专为 LLaMA 模型在本地设备上的高效推理设计。
特性 / 引擎 | vLLM | SGLang(基于 vLLM) | Transformers | llama.cpp |
---|---|---|---|---|
运行速度 | ✅ 非常快(批量推理快) | ✅ 快(底层用 vLLM) | ❌ 相对较慢(PyTorch) | ✅ 极快(C++ 编译) |
资源消耗 | ❌ 高(GPU 资源大) | ❌ 高(依赖 vLLM) | ❌ 中等偏高(GPU/CPU) | ✅ 非常低(纯 CPU 可用) |
部署复杂度 | 中(需支持 CUDA + Triton) | 高(需配置 SkyPilot + 云) | ✅ 简单(Python + pip) | ✅ 简单(编译一次即可) |
并发支持 | ✅ 高(支持连续批处理) | ✅ 高(LLM 服务化封装) | ❌ 差(一次只能处理一个请求) | ❌ 差(命令行式) |
适用平台 | 仅支持 GPU(NVIDIA) | 云平台(需 GPU) | CPU / GPU | ✅ 任意 CPU(轻量) |
精度表现 | ✅ 原始精度(FP16) | ✅ 原始精度 | ✅ 支持 FP16 / BF16 | ❌ 需量化(int4/8) |
是否支持多用户并发 | ✅ 支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
场景 | 推荐引擎 | 理由 |
---|---|---|
云端大模型部署(商业 API) | ✅ vLLM / SGLang | 高吞吐、高并发、支持服务封装 |
本地快速调试 | ✅ Transformers | 文档丰富、Python 生态好 |
轻量推理(边缘/移动) | ✅ llama.cpp | 支持 CPU、资源占用极低 |
多轮对话系统开发 | ✅ SGLang | Prompt 编排 + 状态管理支持好 |
对模型精度要求极高 | ✅ vLLM / Transformers | 不使用量化,精度保留最好 |
场景 | 推荐 | 说明 |
---|---|---|
速度最快 | ✅ vLLM | GPU 上最强,支持连续批处理 |
资源最省 | ✅ llama.cpp | CPU 运行、小模型、低内存需求 |
部署最简单 | ✅ Transformers | pip 安装即可,适合开发测试 |
功能最强大(服务化) | ✅ SGLang | 多路请求处理、函数调用 |
- 目标是部署线上对话接口,服务多人用户:选
vLLM
+SGLang
- 目标是本地测试和开发模型逻辑:选
Transformers
- 目标是将大模型嵌入到移动端或 IoT 设备:选
llama.cpp
量化计算
7B 参数大模型在 8-bit 和 4-bit 量化时的显存占用:
- 全精度(FP16)存储计算
7B(70 亿)参数,每个参数 2 字节(FP16)
总显存占用:7B * 2B = 14GB
- 8-bit 量化
每个参数从 2 字节(FP16)降至 1 字节(INT8)
总显存占用:7B * 1B = 7GB
其他辅助数据(梯度、优化器状态)可能会额外增加占用,但通常减少到 8GB 左右。
- 4-bit 量化
每个参数从 2 字节(FP16)降至 0.5 字节(INT4)
总显存占用:7B * 0.5B = 3.5GB
实际实现(如 GPTQ、BitsAndBytes)可能会略高,但一般在 3.5GB ~ 4GB 之间。
方案 | 计算精度 | 显存占用 | 计算速度 | 适用硬件 | 适用场景 |
---|---|---|---|---|---|
FP16 / BF16 | 高 | 大(约 13GB / 7B 模型) | 最快(Tensor Core 加速) | A100 / H100 / RTX 3090 / 4090 / 7900XTX | 高精度推理,显存足够时,追求最高性能 |
INT8 量化 | 中 | 中(约 7GB / 7B 模型) | 接近 FP16(甚至略快) | A100 / H100 / RTX 3090 / 4090 / 7900XTX | 节省显存,不损失推理速度,适合多模型部署 |
INT4 量化 | 低 | 小(约 4GB / 7B 模型) | 降低 30%~50%(解码开销) | RTX 3090 / 4090 / Mac M2 / CPU(AVX 支持) | 显存极限优化,低端硬件或消费级 GPU 运行大模型 |
Xinference 运行服务
xinference-local --host 0.0.0.0 --port 9997
Open WebUI 指定端口号
open-webui serve --host 0.0.0.0 --port 4000
模型启动命令
./llama-server -m ./models/qwen2-7b/qwen2-7B-F16.gguf --host 0.0.0.0 --port 11435 --api-key 123456
./llama-server -m ./models/bge-m3-f16.gguf --host 0.0.0.0 --port 11436 --api-key 123456 --embedding
llamafactory-cli webui
Word 数据清洗与标注注意事项
- WPS 开启显示段落标记,可看标记符
- 使用 ```` 自定义标识符在想分割的开头打标记
- 删除页脚(此页脚为用户自定义的页码,非word标准的页码,标准页码非噪声数据)
- 换页的内容不位于最底部的非自然分隔,则要将下面内容与上面内容拼接,并用回车符换行
- 删除所有表格和图片
- 分节符、背景、颜色、字体、排版不用管
OpenAI 嵌入模型 Tiktoken 异常
"HTTPSConnectionPoo](host='openaipublic.blob.core.windows.net', port=443): Max retries exceeded with url: /encodings/cl100k_base.tiktoken (Caused by NameResolutionError(\"<urllib3.connection.HTTPSConnection object at 0x7fb481691bd0›: Failed to resolve 'openaipublic.blob.core.windows.net' ([Errno -3]
Temporary failure in name resolution)\"))"
核心功能是将文本转换为模型可处理的 token 序列,并能计算 token 数量
import os
import tiktoken
import hashlib
blob_path = "https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken"
cache_key = hashlib.sha1(blob_path.encode()).hexdigest()
print(cache_key)
## 输出:9b5ad71b2ce5302211f9c61530b329a4922fc6a4
tiktoken_cache_dir = "../data"
os.environ["TIKTOKEN_CACHE_DIR"] = tiktoken_cache_dir
encoding = tiktoken.get_encoding("cl100k_base")
encode = encoding.encode("Hello, world")
print(encode)
离线时: 您可以手动下载分词规则文件,并将其缓存到本地(设置环境变量 TIKTOKEN_CACHE_DIR 来指定缓存目录)。这样可以完全脱离网络使用 tiktoken。
No module named 'tiktoken'
openai.InternalServerError: Error code: 500 - {'detail': "[address=0.0.0.0:42253, pid=1528154] No module named 'tiktoken'"}
这说明你部署的这个模型服务(例如基于 FastChat、LMDeploy、OpenChat、llama.cpp 等搭建的服务)中缺失 tiktoken 模块,而这个模块在嵌入模型或分词时被需要。
在部署服务的机器上安装 tiktoken
你需要登录到运行 http://192.168.2.42:9997/v1 的服务器上,并执行以下命令安装:
pip install tiktoken
LangChain OpenAIEembedding Tiktoken 错误
KeyError: 'Could not automatically map bge-large-zh to a tokeniser. Please use tiktoken.get_encoding
to explicitly get the tokeniser you expect.
LangChain 框架的 OpenAI 风格接入到bge-large-zh
嵌入模型,需要联网验证 cl100k_base.tiktoken
分词器,因为没有直接报错:
HTTPSConnectionPool(host='openaipublic.blob.core.windows.net', port=443): Max retries exceeded with url: /encodings/cl100k_base.tiktoken (Caused by NameResolutionError
目前已通过本地下载文件并缓存成环境变量从本地加载,已解决这个问题
blob_path = "https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken"
cache_key = hashlib.sha1(blob_path.encode()).hexdigest()
## cache_key 为 9b5ad71b2ce5302211f9c61530b329a4922fc6a4
tiktoken_cache_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/data"
os.environ["TIKTOKEN_CACHE_DIR"] = tiktoken_cache_dir
assert os.path.exists(os.path.join(tiktoken_cache_dir, cache_key))
encoding = tiktoken.get_encoding("cl100k_base")
encode = encoding.encode("Hello, world")
print(str(encode))
## 能够正常输出
通过手动映射 bge-large-zh
的编码器到 MODEL_TO_ENCODING
集合中
tiktoken.model.MODEL_TO_ENCODING["bge-large-zh"] = "cl100k_base"
但是 OpenAIEmbeddings()
方法仍然加载 MODEL_TO_ENCODING 原始集合再次报错:"KeyError: 'Could not automatically map bge-large-zh to a tokeniser. Please use
tiktoken.get_encoding to explicitly get the tokeniser you expect.'"
vLLM 区别
vLLM 默认 每个 GPU 只能加载一个模型,不能共享 GPU 显存加载多个模型。