本文档提供了运行 Grok-1 大型语言模型进行推理的详细技术说明。它涵盖了从初始化到文本生成的整个过程,重点关注模型在推理任务中的实际应用。
有关下载模型权重的更多信息,请参阅下载模型权重。
运行 Grok-1 推理涉及多个关键组件的协同工作
来源:runners.py442-577 run.py24-67
推理系统围绕两个主要类构建
InferenceRunner:用于运行推理的高级接口ModelRunner:处理模型初始化和检查点加载来源:runners.py252-270 runners.py136-249
要运行 Grok-1 推理,您需要
ModelRunner 实例InferenceRunner 实例以下代码演示了设置过程
来源:run.py50-67 runners.py275-441
这是一个运行 Grok-1 推理的最小示例
# Set up model configuration
grok_1_model = LanguageModelConfig(...) # Configuration omitted for brevity
# Create InferenceRunner
inference_runner = InferenceRunner(
pad_sizes=(1024,),
runner=ModelRunner(
model=grok_1_model,
bs_per_device=0.125,
checkpoint_path=CKPT_PATH,
),
name="local",
load=CKPT_PATH,
tokenizer_path="./tokenizer.model",
local_mesh_config=(1, 8),
between_hosts_config=(1, 1),
)
# Initialize
inference_runner.initialize()
gen = inference_runner.run()
# Run inference
prompt = "The answer to life the universe and everything is of course"
output = sample_from_model(gen, prompt, max_len=100, temperature=0.01)
print(output)
来源:run.py24-67 runners.py596-605
运行推理时,您可以通过多个参数来控制生成过程
| 参数 | 描述 | 默认示例 |
|---|---|---|
prompt | 输入给模型的文本 | “生命的答案是...” |
max_len | 生成的序列的最大长度 | 100 |
temperature | 控制随机性(值越低,结果越确定) | 0.01 |
nucleus_p | 控制 nucleus 采样的截止点 | 1.0 |
rng_seed | 用于可复现生成的随机种子 | 42 |
这些参数会传递给 sample_from_model 函数,或封装在 Request 对象中。
来源:runners.py253-259 runners.py596-605
输入文本使用 SentencePiece 分词器进行分词
来源:runners.py288 runners.py513-521
模型使用键值缓存来存储先前 token 的注意力状态
来源:runners.py65-74 runners.py330-332
在处理提示时,模型首先会执行一个“预填充”阶段,一次性处理所有提示 token
预填充阶段之后,模型逐个生成 token
来源:runners.py324-328 runners.py549-577
Token 采样涉及几个步骤
来源:runners.py84-97 runners.py100-133
Grok-1 使用 JAX 的 pjit 在多个设备上进行分布式计算
网格是通过两个配置参数创建的
local_mesh_config:控制主机内的设备排列between_hosts_config:控制跨主机的排列来源:runners.py580-593 run.py60-61
运行 Grok-1 推理时,请注意以下事项
bs_per_device 参数控制(值越小,内存占用越少)pad_sizes 参数定义了可能影响内存使用的填充桶运行推理的常见问题
本文档涵盖了运行 Grok-1 模型进行推理的实际操作,包括初始化、核心组件、参数设置以及详细的推理过程。有关模型架构的信息,请参阅 模型架构。