Llama模型使用指南

Llama模型使用指南

技术背景

Llama是一款面向开发者、研究人员和企业的开放大型语言模型(LLM),作为基础系统的一部分,它为全球社区的创新提供了基石。其具有开放访问、广泛的生态系统以及注重信任与安全等特点,模型权重向研究人员和商业实体授权,遵循开放原则。

实现步骤

模型下载

  1. 访问Meta Llama网站。
  2. 阅读并接受许可证。
  3. 请求批准后,通过电子邮件接收签名URL。
  4. 安装Llama CLI:pip install llama-stack
  5. 运行llama model list查看最新可用模型,确定要下载的模型ID。若要查看旧版本,运行llama model list --show-all
  6. 运行llama download --source meta --model-id CHOSEN_MODEL_ID
  7. 提示时输入提供的URL开始下载。注意链接在24小时和一定下载次数后会过期,若出现403错误可重新请求链接。

运行模型

  1. 克隆仓库后,在合适的Python环境(uv、conda或virtualenv)中运行pip install .[torch]安装依赖。
  2. 示例脚本位于models/{ llama3, llama4 }/scripts/子目录。Llama4系列模型在全精度(bf16)推理时至少需要4个GPU。
  3. 对于Instruct(Chat)模型,可使用以下脚本:
1
2
3
4
5
6
NGPUS=4
CHECKPOINT_DIR=~/.llama/checkpoints/Llama-4-Scout-17B-16E-Instruct
PYTHONPATH=$(git rev-parse --show-toplevel) \
torchrun --nproc_per_node=$NGPUS \
-m models.llama4.scripts.chat_completion $CHECKPOINT_DIR \
--world_size $NGPUS
  1. 对于Base模型,更新CHECKPOINT_DIR路径并使用models.llama4.scripts.completion脚本。

运行推理时使用FP8和Int4量化

可通过FP8或Int4量化减少模型内存占用,同时精度损失极小。使用--quantization-mode标志指定量化模式:

  • fp8_mixed:部分权重使用FP8,激活使用bfloat16进行混合精度推理。
  • int4_mixed:部分权重使用Int4,激活使用bfloat16进行混合精度推理。

使用FP8运行Llama - 4 - Scout - 17B - 16E - Instruct需要2个80GB内存的GPU,使用Int4则只需1个80GB内存的GPU。示例脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
MODE=fp8_mixed  # or int4_mixed
if [ $MODE == "fp8_mixed" ]; then
NGPUS=2
else
NGPUS=1
fi
CHECKPOINT_DIR=~/.llama/checkpoints/Llama-4-Scout-17B-16E-Instruct
PYTHONPATH=$(git rev-parse --show-toplevel) \
torchrun --nproc_per_node=$NGPUS \
-m models.llama4.scripts.chat_completion $CHECKPOINT_DIR \
--world_size $NGPUS \
--quantization-mode $MODE

从Hugging Face下载

  1. 访问其中一个仓库,如meta-llama/Llama-4-Scout-17B-16E
  2. 阅读并接受许可证,请求批准后可访问所有Llama 3.1模型及以前版本。
  3. 若要下载原始本地权重,点击“Files and versions”标签并下载原始文件夹内容,也可使用命令行下载:
1
huggingface-cli download meta-llama/Llama-4-Scout-17B-16E-Instruct-Original --local-dir meta-llama/Llama-4-Scout-17B-16E-Instruct-Original
  1. 使用transformers时,可使用以下代码下载并缓存权重:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# inference.py
from transformers import AutoTokenizer, Llama4ForConditionalGeneration
import torch

model_id = "meta-llama/Llama-4-Scout-17B-16E-Instruct"

tokenizer = AutoTokenizer.from_pretrained(model_id)

messages = [
{"role": "user", "content": "Who are you?"},
]
inputs = tokenizer.apply_chat_template(
messages, add_generation_prompt=True, return_tensors="pt", return_dict=True
)

model = Llama4ForConditionalGeneration.from_pretrained(
model_id, device_map="auto", torch_dtype=torch.bfloat16
)

outputs = model.generate(**inputs.to(model.device), max_new_tokens=100)
outputs = tokenizer.batch_decode(outputs[:, inputs["input_ids"].shape[-1] :])
print(outputs[0])

运行torchrun --nnodes=1 --nproc_per_node=8 inference.py

安装

可使用pip install llama-models将此仓库作为包安装。

最佳实践

  • 在下载模型时,及时处理可能出现的链接过期问题,避免影响下载进度。
  • 运行模型时,根据模型要求合理配置GPU资源,确保模型正常运行。
  • 使用量化模式时,根据实际需求选择合适的量化模式,在内存占用和精度之间取得平衡。

常见问题

  • 模型下载链接过期:可重新在Meta Llama网站请求链接。
  • 模型运行报错:检查GPU数量和内存是否满足模型要求,以及依赖是否正确安装。
  • Hugging Face访问问题:确保已阅读并接受许可证,耐心等待请求处理。