
LitGPT 高层 Python API 实战指南从模型加载、推理微调到服务部署【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgptLitGPT 提供了一套面向 Python 开发者的高层 APIlitgpt.api.LLM让开发者可以用几行代码完成大模型的加载、推理、基准测试、训练接入与在线服务部署而无需直接接触底层的 PyTorch 模块、Fabric 初始化与权重文件管理。本文以仓库文档 tutorials/developer-docs/python-api.md 为骨架结合 litgpt/api.py 的源码实现、tutorials/python-api.md 的完整教程以及 tests/test_api.py 中的测试用例系统讲解这套 API 的用法、参数语义与底层原理。读完本文你将掌握LLM.load/LLM.save的完整加载与导出流程、generate的采样控制与流式输出、多 GPU 推理策略sequential / tensor_parallel、性能基准测试方法以及通过litgpt serve对外提供/predict服务的完整链路。说明tutorials/developer-docs/python-api.md在仓库中标注为 work-in-progress draft进行中的草案其中部分接口如download_dataset、prepare_dataset、instruction_finetune、pretrain、serve等实例方法属于规划中的高层 API 形态而LLM.load、generate、save、distribute、benchmark、trainer_setup等已在 litgpt/api.py 中落地并有 tests/test_api.py 中的测试用例印证。本文对两者分别标注确保读者清楚哪些代码当前即可运行。一、整体设计LLM对象 模型 预处理器按照草案 tutorials/developer-docs/python-api.md 的设计LLM.load会加载并返回一个llm对象这个对象同时包含两部分核心内容llm.model一个 PyTorch 模块实际类型为 litgpt/model.py 中的GPTllm.preprocessor.tokenizer分词器tokenizer。在 litgpt/api.py 中LLM类被定义为torch.nn.Module的子类其__init__接收modelGPT实例与preprocessorPreprocessor实例等成员并额外维护config、checkpoint_dir、fabric、generate_strategy、kv_cache_initialized等运行状态。其中Preprocessor封装了 tokenize / de-tokenize 逻辑litgpt/api.pyclass Preprocessor: def __init__(self, tokenizer: Tokenizer, device: str cpu) - None: self.tokenizer tokenizer self.device device def encode(self, text: str) - torch.Tensor: return self.tokenizer.encode(text, deviceself.device) def decode(self, token_ids: torch.Tensor) - str: return self.tokenizer.decode(token_ids)同时LLM暴露了一个便捷属性tokenizer直接透传self.preprocessor.tokenizerlitgpt/api.py。LLM还委托了 PyTorch 的标准接口state_dict/load_state_dict转发给内部模型forward支持传入input_ids与可选target_ids在没有自定义loss_fn时默认使用chunked_cross_entropy计算损失并返回(logits, loss)元组litgpt/api.py这正是后续与 PyTorch Lightning Trainer 集成训练的基础。从 litgpt/init.py 可以看到包级导出from litgpt import LLM即来自litgpt.api并同时导出GPT、Config、PromptStyle、Tokenizer等底层构件方便进阶用户按需使用。二、模型加载LLM.load2.1 草案中的高层签名草案 tutorials/developer-docs/python-api.md 给出了面向普通用户与进阶用户的分层参数设计from litgpt import LLM llm LLM.load( modelurl | local_path, # 普通用户只需关心 memory_reductionnone | medium | strong # 进阶选项 sourcehf | local | other quantizebnb.nf4, precisionbf16-true, deviceauto | cuda | cpu, )其中llm.model是 PyTorch 模块llm.preprocessor.tokenizer是分词器。2.2 当前源码中的实际签名与加载流程当前仓库中LLM.load的实际签名litgpt/api.py为LLM.load( model: str, # 本地目录或模型名HF Hub 仓库名 init: pretrained | random pretrained, # 预训练权重或随机初始化 tokenizer_dir: Path | None None, # 可选的自定义分词器目录 access_token: str | None None, # 访问受限模型的 API token distribute: auto | None auto, # auto 自动放到单 GPU/CPU )草案中的memory_reduction、source、quantize、precision、device等参数在当前的实现里被拆分到两个阶段完成加载阶段LLM.load只负责模型权重与分词器的获取和装配部署/分发阶段llm.distribute(...)负责设备、精度、量化与多卡策略详见第六节。测试 tests/test_api.py 验证了从 Hub 加载EleutherAI/pythia-14m后可以直接generate的完整路径。LLM.load的加载流程可以概括为litgpt/api.py获取 checkpointinitpretrained时调用auto_download_checkpoint若本地不存在同名目录则自动从 Hugging Face Hub 下载权重然后从model_config.yaml读取Configinitrandom时通过Config.from_name用随机权重构造模型此模式必须提供tokenizer_dir。完整的官方模型清单可以通过命令行litgpt download list查看见 litgpt/main.py 中注册的download命令。加载分词器优先使用tokenizer_dir否则使用 checkpoint 目录内的分词器文件。装配 Prompt 风格从 checkpoint 目录加载已保存的prompt_style.yamlload_prompt_style否则根据Config自动推导PromptStyle.from_config。Fabric 初始化distributeauto时按 CUDA / MPS / CPU 的优先级自动选择 accelerator并以get_default_supported_precision(trainingFalse)选择默认推理精度随后用fabric.setup_module把模型挂到设备上通过load_checkpoint载入lit_model.pth权重同时设置torch.set_float32_matmul_precision(high)以获得更好的矩阵乘性能。返回装配好的LLM实例model、preprocessor、prompt_style、config、checkpoint_dir、fabric等成员齐全。2.3 使用示例参考 tutorials/python-api.md 中的用法一次最简单的加载如下from litgpt import LLM llm LLM.load(microsoft/phi-2)如果本地不存在microsoft/phi-2目录它会自动从 Hub 下载config.json、*.safetensors分片、tokenizer.json等文件第二次加载时由于权重已在本地的 checkpoint 目录中将直接读取本地文件。加载自己用 LitGPT 预训练或微调产出的 checkpoint 也是同样方式my_llm LLM.load(path/to/my/local/checkpoint)需要从随机权重开始例如准备预训练时from litgpt.api import LLM llm LLM.load(pythia-160m, initrandom, tokenizer_dirEleutherAI/pythia-160m)三、模型保存llm.save草案给出了保存接口的形态并规划了导出格式选项llm.save(checkpoint_dir, formatlightning | ollama | hf)当前源码中的LLM.save实现litgpt/api.py以一个输出目录为参数llm.save(path/to/save/directory)它的核心行为是在目标目录下写出权重文件lit_model.pthtorch.save或 Fabric 的fabric.save若模型来自已有 checkpoint则复制其配置文件copy_config_files包括model_config.yaml、tokenizer 相关文件等若是随机初始化模型则用save_config写出配置保存prompt_style.yamlsave_prompt_style保证之后LLM.load能还原相同的对话模板与 prompt 风格。tests/test_api.py 的test_save_method验证了保存目录应包含config.json、generation_config.json、lit_model.pth、model_config.yaml、prompt_style.yaml、tokenizer_config.json、tokenizer.json等文件。由于权重、tokenizer 与配置全部随目录保存之后可以用LLM.load(path/to/save/directory)直接恢复完整模型无需再依赖原始 Hub 仓库参见 tutorials/python-api.md。提示草案中规划的formatlightning | ollama | hf导出选项代表未来的格式扩展方向目前仓库中的保存格式以 Lightning 生态的 checkpoint 目录含lit_model.pth为主。四、推理与对话llm.generate4.1 草案形态草案中的生成调用非常简洁response llm.generate( promptWhat do Llamas eat?, temperature0.1, top_p0.8, ... )4.2 源码中的完整签名LLM.generate在源码中的完整签名litgpt/api.py为generate( prompt: str, sys_prompt: str | None None, # 系统提示词用于施加行为约束/风格 max_new_tokens: int 50, # 最多生成的新 token 数 temperature: float 1.0, # 采样温度按 1/temperature 缩放 logits top_k: int | None None, # 只从概率最高的 k 个 token 中采样 top_p: float 1.0, # 核采样累积概率阈值0 top_p 1 return_as_token_ids: bool False, # True 时返回 token ID 张量而非文本 stream: bool False, # True 时返回逐 token 生成器 ) - str | torch.Tensor采样参数的组合顺序为先top_k截断再temperature缩放最后top_p核采样见 litgpt/api.py 的参数文档。generate内部的底层实现调用的是 litgpt/generate/base.py 的generate_fn非流式或 litgpt/chat/base.py 的stream_generate_fn流式二者共享 KV cache 管理与采样逻辑。在生成前generate会做几件重要的事通过self._text_to_token_ids(prompt, sys_prompt)先把文本套上 prompt 模板self.prompt_style.apply再编码为 token IDlitgpt/api.py动态管理 KV cache若未初始化则以batch_size1、max_seq_lengthprompt 长度 max_new_tokens建立缓存若设置了fixed_kv_cache_size则生成前对 cache 做reset_parameters()重置litgpt/api.py以 EOS tokenself.preprocessor.tokenizer.eos_id作为停止条件。4.3 使用示例参考 tutorials/python-api.mdfrom litgpt import LLM llm LLM.load(microsoft/phi-2) text llm.generate(What do Llamas eat?, top_k1, max_new_tokens30) print(text)流式输出逐 token 打印result llm.generate(hi, streamTrue) for e in result: print(e, end, flushTrue)如果需要把生成的 token ID 直接用于下游处理可设置return_as_token_idsTrue返回值类型为torch.Tensortests/test_api.py 验证了该行为。五、数据集准备草案形态与当前实现草案为数据集环节规划了两个高层方法llm.download_dataset(URL, ...) dataset llm.prepare_dataset( path, taskpretrain | instruction_finetune, test_portion0.1, ... )需要说明这两个实例方法属于规划中的高层 API在当前 litgpt/api.py 中尚未实现。仓库当前的数据集能力以litgpt.data包与命令行脚本的形式提供例如下载数据集与准备训练数据可参考 tutorials/prepare_dataset.md 中描述的命令行流程在 Python 侧教程 tutorials/python-api.md 展示了from litgpt.data import Alpaca2k的用法数据集对象通过data.connect(llm.tokenizer, batch_size..., max_seq_length...)与分词器绑定随后直接交给Trainer.fit微调与预训练的数据配置示例见 config_hub/finetune 与 config_hub/pretrain 目录下的 YAML 文件。taskpretrain | instruction_finetune与test_portion的设定与当前litgpt.data中不同任务数据集按 train/validation 拆分的设计目标一致草案形态反映了未来把这些能力收敛到LLM实例方法上的方向。六、训练从草案 API 到 Trainer 集成6.1 草案形态草案规划了统一的训练入口与微调方法选择llm.instruction_finetune( configNone, datasetdataset, max_iter10, methodfull | lora | adapter | adapter_v2 ) llm.pretrain(configNone, datasetdataset, max_iter10, ...)其中method参数对应仓库中四种微调技术全量微调full、LoRA、Adapter、Adapter v2它们各自有独立的命令行实现与配置文件分别位于 litgpt/finetune/full.py、litgpt/finetune/lora.py、litgpt/finetune/adapter.py、litgpt/finetune/adapter_v2.py对应的配置示例可在 config_hub/finetune 下各模型的full.yaml/lora.yaml/qlora.yaml中查看。当前这两个实例方法同样属于草案 API尚未在 litgpt/api.py 中实现。6.2 当前可用的训练接入方式PyTorch Lightning Trainer尽管instruction_finetune/pretrain实例方法尚在规划中LitGPT 官方已提供一套完整的 Trainer 集成方案见 tutorials/python-api.md 的 PyTorch Lightning Trainer support 章节。Step 1定义LightningModule。关键点是在LLM.load(..., distributeNone)时不启用自动分发把设备交给 Trainer 管理然后在setup()阶段调用self.llm.trainer_setup(...)完成兼容性初始化import torch from litgpt import LLM from litgpt.data import Alpaca2k import lightning as L class LitLLM(L.LightningModule): def __init__(self, checkpoint_dir, tokenizer_dirNone, trainer_ckpt_pathNone): super().__init__() self.llm LLM.load(checkpoint_dir, tokenizer_dirtokenizer_dir, distributeNone) self.trainer_ckpt_path trainer_ckpt_path def setup(self, stage): self.llm.trainer_setup(trainer_ckptself.trainer_ckpt_path) def training_step(self, batch): logits, loss self.llm(input_idsbatch[input_ids], target_idsbatch[labels]) self.log(train_loss, loss, prog_barTrue) return loss def validation_step(self, batch): logits, loss self.llm(input_idsbatch[input_ids], target_idsbatch[labels]) self.log(validation_loss, loss, prog_barTrue) return loss def configure_optimizers(self): warmup_steps 10 optimizer torch.optim.AdamW(self.llm.model.parameters(), lr0.0002, weight_decay0.0, betas(0.9, 0.95)) scheduler torch.optim.lr_scheduler.LambdaLR(optimizer, lambda step: step / warmup_steps) return [optimizer], [scheduler]trainer_setup在源码中的实现litgpt/api.py会重新以GPT(self.config)初始化模型并优先从 Trainer 检查点trainer_ckpt剥离state_dict中的对象名前缀后加载或lit_model.pth加载权重从而与 Lightning Trainer 的检查点体系对齐。Step 2使用 Trainer 完成训练。教程给出了四种典型场景从随机权重预训练先用initrandom建模型并save成 checkpoint再交给 Trainer继续预训练或微调已下载模型直接用checkpoint_dirEleutherAI/pythia-160m构造LitLLM从 Trainer 检查点恢复训练用find_latest_checkpoint(lightning_logs)找到最新的.ckpt文件传入trainer_ckpt_path保存后恢复训练后调用lit_model.llm.save(finetuned_checkpoint)手动保存完整 checkpoint含 tokenizer之后可脱离原始模型目录独立加载继续训练。典型训练代码含梯度累积与精度设置accumulate_grad_batches1表示关闭梯度累积batch_size 8 accumulate_grad_batches 1 lit_model LitLLM(checkpoint_dirEleutherAI/pythia-160m) data Alpaca2k() data.connect(lit_model.llm.tokenizer, batch_sizebatch_size, max_seq_length512) trainer L.Trainer( devices1, acceleratorcuda, max_epochs1, accumulate_grad_batchesaccumulate_grad_batches, precisionbf16-true, ) trainer.fit(lit_model, data) lit_model.llm.model.to(lit_model.llm.preprocessor.device) lit_model.llm.generate(hello world)七、多 GPU 推理策略llm.distributeLLM.load默认distributeauto把模型放到单张 GPU无 GPU 时落到 CPU。若模型无法装入单卡显存或希望借助并行加速可使用llm.distribute(...)litgpt/api.py其关键参数如下参数取值说明acceleratorcpu/cuda/mps/auto目标设备类型auto按 CUDA → MPS → CPU 优先级自动选择devices整数或autoGPU 数量auto使用全部可用 GPU单卡推理传1precision32-true/16-mixed/16-true/bf16-mixed/bf16-trueFabric 精度设置默认按get_default_supported_precision推断quantizebnb.nf4/bnb.nf4-dq/bnb.fp4/bnb.fp4-dq/bnb.int8bitsandbytes 量化方案量化与混合精度不能同时使用generate_strategysequential/tensor_parallel多卡生成策略详见下文fixed_kv_cache_size整数或max_model_supported固定 KV cache 长度用于编译或 sequential 场景下降低显存多卡策略目前只支持sequential与tensor_parallel见 tests/test_api.py 的报错断言二者的取舍如下sequential顺序切分把 Transformer 的不同层分到不同 GPU 上顺序执行目标是跑起单卡放不下的模型。代价是串行执行速度比并行慢。若模型单卡能放下不建议使用。可通过fixed_kv_cache_size如 256进一步压缩 KV cache 显存且该值同时限定了单次generate可返回的最大 token 数。tensor_parallel张量并行通过 litgpt/generate/tp.py 的tensor_parallel实现真正的并行推理速度更快但初始化大模型较慢且无法在 Jupyter 等交互式进程中运行需放在if __name__ __main__:中因为其内部通过 Fabric 的 DDP 策略与fabric.launch()启动多进程。用法示例tutorials/python-api.mdfrom litgpt.api import LLM # sequential 策略 llm LLM.load(microsoft/phi-2, distributeNone) llm.distribute( generate_strategysequential, devices4, # 可选默认使用所有可用 GPU fixed_kv_cache_size256, ) text llm.generate(What do llamas eat?, max_new_tokens100)# tensor_parallel 策略 from litgpt.api import LLM if __name__ __main__: llm LLM.load(modelmeta-llama/Meta-Llama-3.1-8B-Instruct, distributeNone) llm.distribute(generate_strategytensor_parallel, devices4) print(llm.generate(promptWhat do llamas eat?)) print(llm.generate(promptWhat is 12?, top_k1))注意以initrandom初始化的模型目前不支持distribute()源码会抛出NotImplementedError见 tests/test_api.py量化与混合精度组合会触发ValueErrorlitgpt/api.py。八、性能基准llm.benchmarkLLM.benchmark(num_iterations1, **kwargs)是generate的性能包装器litgpt/api.py参数与generate一致额外支持num_iterations控制重复次数。它返回(outputs, benchmark_dict)其中 benchmark 字典包含以下指标Seconds total单次生成总耗时Seconds to first token首个 token 耗时流式模式下有效Tokens generated生成的 token 数Inference speed in tokens/sec吞吐tokens/sTotal GPU memory allocated in GBCUDA 上累计分配的 GPU 显存峰值torch.cuda.max_memory_allocated。参考教程 tutorials/python-api.md典型用法from litgpt.api import LLM from pprint import pprint llm LLM.load(modelmicrosoft/phi-2, distributeNone) llm.distribute(fixed_kv_cache_size500) text, bench_d llm.benchmark(promptWhat do llamas eat?, top_k1, streamTrue) pprint(bench_d)由于首次迭代包含 warmup教程建议设置num_iterations10并丢弃第一轮数据后再统计需要输出为 Markdown 表格时可使用工具函数benchmark_dict_to_markdown_tablelitgpt/api.py它对每个指标计算均值与标准差ddof1tests/test_api.py 对该函数的输出格式有完整断言。仓库还提供了用于 PR 场景的基准对比脚本pull_request_benchmark_util默认模型microsoft/phi-2、6 次迭代会自动打印 Git commit、PyTorch 版本与设备信息litgpt/api.py。九、服务部署从llm.serve草案到litgpt serve实现9.1 草案形态草案为在线服务规划了实例方法形态llm.serve(port8000)随后在另一个 Python 会话中请求import requests, json response requests.post( http://127.0.0.1:8000/predict, json{prompt: Fix typos in the following sentence: Example input} ) print(response.json()[output])9.2 当前实现litgpt serve命令当前仓库中服务能力通过命令行litgpt serve落地在 litgpt/main.py 中serve命令被映射到 litgpt/deploy/serve.py 的run_server。这与草案中的/predict端点、port8000默认值、{prompt: ...}请求体与{output: ...}响应格式完全一致可见 tutorials/deploy.md 中的完整说明。启动服务二步法# 1) 下载预训练模型也可以使用自己的微调模型 litgpt download microsoft/phi-2 # 2) 启动服务默认端口 8000端点 /predict litgpt serve microsoft/phi-2run_server的关键参数litgpt/deploy/serve.py包括--port默认 8000、--devices、--accelerator默认auto、--quantize、--precision、--temperature默认 0.8、--top_k默认 50、--top_p默认 1.0、--max_new_tokens默认 50、--stream流式响应、--openai_spec启用 OpenAI 兼容的/v1/chat/completions端点、--api_path自定义端点路径默认/predict、--generate_strategy多卡策略devices1时默认sequential等。服务底层基于 LitServe根据openai_spec/stream标志分别选择OpenAISpecLitAPI/StreamLitAPI/SimpleLitAPIlitgpt/deploy/serve.py其中SimpleLitAPI.predict内部正是调用self.llm.generate(...)encode_response返回{output: output}。流式模式token 逐块返回litgpt serve microsoft/phi-2 --stream true客户端侧同样用requests.post请求/predict响应中的output会以增量块的形式到达详细示例见 tutorials/deploy.md。十、写在最后草案 API 与现状对照为方便读者判断哪些代码当前即可运行这里汇总草案 tutorials/developer-docs/python-api.md 与当前仓库实现的对照草案 API当前状态对应实现/替代方案LLM.load/llm.model/llm.preprocessor.tokenizer已实现litgpt/api.pyllm.save(checkpoint_dir, format...)已实现format选项为草案规划litgpt/api.py测试见 tests/test_api.pyllm.generate(prompt, temperature, top_p, ...)已实现另有sys_prompt、top_k、stream、return_as_token_ids等litgpt/api.pyllm.download_dataset/llm.prepare_dataset草案规划当前用litgpt.data数据集类与 tutorials/prepare_dataset.md 流程llm.instruction_finetune(method...)/llm.pretrain草案规划当前用 Trainer 集成tutorials/python-api.md或litgpt finetune_*/litgpt pretrain命令litgpt/main.pyllm.serve(port8000)以litgpt serve命令实现端点与格式与草案一致litgpt/deploy/serve.py、tutorials/deploy.mdllm.distribute(...)、llm.benchmark(...)已实现草案未列出属源码扩展litgpt/api.py从源码结构看LLM类正在从推理/训练基础设施向一站式高层 API演进草案中规划的prepare_dataset、instruction_finetune、pretrain、serve等方法与现有的 CLI 命令、litgpt.data数据集体系、litgpt.finetune.*训练脚本一一对应未来极有可能以实例方法的形式收敛到LLM上。开发者当前可以放心使用的是load、save、generate、distribute、benchmark、trainer_setup等已落地接口其余能力请以litgpt serve --help、litgpt download list等命令行的实际输出为准。进一步阅读tutorials/python-api.mdPython API 完整教程、tutorials/deploy.md服务部署、tutorials/finetune.md微调、tutorials/pretrain.md预训练、tutorials/quantize.md量化、tutorials/developer-docs/README.md开发者文档索引。【免费下载链接】litgpt20 high-performance LLMs with recipes to pretrain, finetune and deploy at scale.项目地址: https://gitcode.com/GitHub_Trending/li/litgpt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考