
开源大模型食用指南Gemma-2-9b-it FastAPI 部署调用实战【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm本篇指南以《开源大模型食用指南》仓库self-llm中 models/Gemma2/01-Gemma-2-9b-it FastApi 部署调用.md 为骨架完整讲解在 AutoDL 云 GPU 平台上将 Google Gemma-2-9b-it 对话模型从零部署为本地 FastAPI 服务的全流程。读完本文你将掌握环境与依赖的搭建、基于 ModelScope 的模型下载、FastAPI Transformers 服务端代码的编写与逐段原理、服务启动验证以及通过 curl 与 Python requests 两种方式调用 API 的完整方法。一、环境准备租赁 GPU 机器与选择基础镜像Gemma-2-9b-it 为 9B 参数规模的因果语言模型其权重体积约 18GB推理阶段建议使用 24GB 显存的显卡。本仓库教程统一在 AutoDL 平台租赁RTX 3090/24G 显存的机器基础镜像选择PyTorch -- 2.1.0 -- 3.10(ubuntu22.04) -- 12.1该组合提供 Python 3.10、PyTorch 2.1.0 与 CUDA 12.1 运行时可直接满足 Transformers 推理需求。为降低环境配置门槛仓库为 Gemma2 系列教程在 AutoDL 平台准备了专用环境镜像适用于该仓库 Gemma2 教程的所有部署场景FastAPI 部署、LangChain 接入、WebDemo、Lora 微调可直接基于该镜像创建 AutoDL 实例。二、环境配置pip 换源与依赖安装机器开机后打开终端先升级 pip 并将 pypi 源切换为清华源以加速安装随后安装部署所需的三个核心依赖# 升级pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 安装 fastapi modelscope pip install fastapi pip install modelscope pip install transformers4.42.3三个依赖包的职责与版本注意点fastapi高性能 Web 框架负责接收 HTTP 请求、调用模型并返回 JSON 响应modelscopeModelScope 官方 SDK本文使用其snapshot_download函数从魔搭社区下载模型权重transformers4.42.3Hugging Face Transformers 库提供AutoTokenizer与AutoModelForCausalLM接口。版本必须锁定为 4.42.3——同仓库 models/Gemma2/04-Gemma-2-9b-it peft lora微调.md 中也特别强调请务必安装 4.42.3 版本该版本对 Gemma2 架构的 chat template 与生成行为兼容性最佳。除 pip 换源外仓库还提供了更全面的环境配置参考pip/conda 换源方法见 models/General-Setting/01-pip、conda换源.md。三、模型下载ModelScope 快速拉取 Gemma-2-9b-it使用 modelscope 的snapshot_download函数下载模型第一个参数为模型名称参数cache_dir为模型的下载路径from modelscope import snapshot_download model_dir snapshot_download(LLM-Research/gemma-2-9b-it, cache_dir/root/autodl-tmp)执行后模型权重会被缓存到/root/autodl-tmp/LLM-Research/gemma-2-9b-it目录这也是后续 api.py 中加载模型所用的路径。模型大小约 18GB在 AutoDL 内网环境下下载约需 5 分钟。关于模型下载仓库在 models/General-Setting/03-模型下载.md 中总结了完整方案矩阵除 ModelScope 外还支持 Hugging Face 官方huggingface-cli download含--resume-download断点续传、--local-dir本地路径、HF 镜像站下载通过HF_ENDPOINT环境变量指向镜像、git-lfs 克隆以及 Openxlab 下载等其中 ModelScope 方式在国内网络环境下速度与稳定性最佳cache_dir建议使用绝对路径。四、代码准备开启 AutoDL 端口映射AutoDL 实例默认不对外开放端口。若希望在本机通过http://localhost:6006访问远程机器上的 API 服务需要先配置端口映射。AutoDL 平台提供了自定义服务的端口映射能力不同区域的机器配置方式可能略有差异完整图文配置方法见仓库文档 models/General-Setting/02-AutoDL开放端口.md其核心思路是在 AutoDL 控制台的自定义服务中开启 6006 端口映射将实例的 6006 端口转发到本机http://localhost:6006。本教程的 API 服务固定监听0.0.0.0:6006因此端口映射目标统一为 6006不依赖端口映射、仅需在实例终端内验证的场景可跳过本步骤。五、编写 api.pyFastAPI Transformers 服务端实现新建api.py文件写入以下完整代码并保存。代码包含详细注释将 FastAPI 的 Web 能力与 Transformers 的模型推理能力组合为一个可复用的对话 API 服务from fastapi import FastAPI, Request from transformers import AutoTokenizer, AutoModelForCausalLM import uvicorn import json import datetime import torch # 设置设备参数 DEVICE cuda # 使用CUDA DEVICE_ID 0 # CUDA设备ID如果未设置则为空 CUDA_DEVICE f{DEVICE}:{DEVICE_ID} if DEVICE_ID else DEVICE # 组合CUDA设备信息 # 清理GPU内存函数 def torch_gc(): if torch.cuda.is_available(): # 检查是否可用CUDA with torch.cuda.device(CUDA_DEVICE): # 指定CUDA设备 torch.cuda.empty_cache() # 清空CUDA缓存 torch.cuda.ipc_collect() # 收集CUDA内存碎片 # 创建FastAPI应用 app FastAPI() # 处理POST请求的端点 app.post(/) async def create_item(request: Request): global model, tokenizer # 声明全局变量以便在函数内部使用模型和分词器 json_post_raw await request.json() # 获取POST请求的JSON数据 json_post json.dumps(json_post_raw) # 将JSON数据转换为字符串 json_post_list json.loads(json_post) # 将字符串转换为Python对象 prompt json_post_list.get(prompt) # 获取请求中的提示 # 调用模型进行对话生成 chat [ { role: user, content: prompt }, ] prompt tokenizer.apply_chat_template(chat, tokenizeFalse, add_generation_promptTrue) inputs tokenizer.encode(prompt, add_special_tokensFalse, return_tensorspt) outputs model.generate(input_idsinputs.to(model.device), max_new_tokens150) outputs tokenizer.decode(outputs[0]) response outputs.split(model)[-1].replace(end_of_turn\neos, ) now datetime.datetime.now() # 获取当前时间 time now.strftime(%Y-%m-%d %H:%M:%S) # 格式化时间为字符串 # 构建响应JSON answer { response: response, status: 200, time: time } # 构建日志信息 log [ time ] , prompt: prompt , response: repr(response) print(log) # 打印日志 torch_gc() # 执行GPU内存清理 return answer # 返回响应 # 主函数入口 if __name__ __main__: # 加载预训练的分词器和模型 path /root/autodl-tmp/LLM-Research/gemma-2-9b-it print(Creat tokenizer...) tokenizer AutoTokenizer.from_pretrained(path) print(Creat model...) model AutoModelForCausalLM.from_pretrained( path, device_mapcuda, torch_dtypetorch.bfloat16,) # 启动FastAPI应用 # 用6006端口可以将autodl的端口映射到本地从而在本地使用api uvicorn.run(app, host0.0.0.0, port6006, workers1) # 在指定端口和主机上启动应用5.1 关键实现点逐段解读GPU 设备与显存管理DEVICE cuda与DEVICE_ID 0组合出cuda:0设备标识torch_gc()在每次请求结束后调用torch.cuda.empty_cache()清空缓存并ipc_collect()回收显存碎片避免多轮调用后显存持续膨胀是长时运行 API 服务的重要实践。请求解析与响应封装接口通过await request.json()异步读取请求体兼容 requests/curl 等任意 HTTP 客户端发送的 JSON返回结构固定为{response: ..., status: 200, time: ...}并在服务端日志中打印请求与响应内容方便联调排查。对话模板与推理链路模型调用前先构造 messages 列表role: user再经tokenizer.apply_chat_template(chat, tokenizeFalse, add_generation_promptTrue)生成 Gemma2 的对话提示词形如bosstart_of_turnuser\n...end_of_turn\nstart_of_turnmodel\n随后encode为 input_ids 交给model.generate以max_new_tokens150限制生成长度。响应解析中outputs.split(model)[-1]提取的是start_of_turnmodel之后模型实际生成的部分再用.replace(end_of_turn\neos, )剥离结束符标记。模型加载方式主入口中模型以device_mapcuda全量加载到 GPU并以torch_dtypetorch.bfloat16半精度加载显著降低显存占用与推理延迟——RTX 309024G可以流畅承载 9B 规模模型的 bf16 推理。六、Api 部署启动服务并验证在终端输入以下命令启动 API 服务python api.py首次启动会依次打印 Creat tokenizer... 与 Creat model... 日志模型加载完毕后出现 uvicorn 监听信息即代表服务启动成功。服务默认监听 6006 端口通过 POST 方法调用根路径/。推荐使用 curl 快速验证curl -X POST http://127.0.0.1:6006 \ -H Content-Type: application/json \ -d {prompt: 你好}也可以在 Python 中使用 requests 库调用便于集成进自己的应用脚本import requests import json def get_completion(prompt): headers {Content-Type: application/json} data {prompt: prompt} response requests.post(urlhttp://127.0.0.1:6006, headersheaders, datajson.dumps(data)) return response.json()[response] if __name__ __main__: print(get_completion(你好))两种调用方式返回的response字段即模型生成的对话回复文本与 api.py 中封装的 JSON 结构一一对应。6.1 调用参数与端口说明监听地址host0.0.0.0使服务可被容器内任意来源访问配合 AutoDL 端口映射后即可从本机http://localhost:6006调用工作进程workers1保证模型单实例常驻显存避免多进程重复加载导致显存溢出生成参数max_new_tokens150控制单次回复的最大新增 token 数可依据业务对话长度需求调整。七、从 API 服务到完整应用仓库配套教程延伸完成 FastAPI 部署后本仓库围绕 Gemma-2-9b-it 还提供了完整的上层应用与训练闭环建议按需继续学习LangChain 接入通过继承langchain.llms.base.LLM并重写_call函数将本地 Gemma2 封装为自定义 LLM 类从而以统一接口接入 LangChain 生态实现知识库助手等应用Streamlit WebDemo 部署基于 Streamlit 构建带侧边栏参数调节的图形化聊天界面交互式体验模型能力PEFT Lora 微调配套 ipynb 版本基于 dataset/huanhuan.json 指令数据集讲解LoraConfig、TrainingArguments与Trainer的完整微调流程微调后的 checkpoint 可用与本文相同的 FastAPI 方式封装上线。八、总结本文完整还原了 Gemma-2-9b-it 在 AutoDL 环境下的 FastAPI 部署链路环境准备 → 依赖安装 → 模型下载 → 端口映射 → api.py 编写 → 服务启动 → curl/requests 调用验证。这一流程是自建大模型服务的标准范式Transformers 负责模型推理、FastAPI 负责 HTTP 接口、ModelScope 负责国内模型分发三者组合即可快速产出可被任意客户端调用的对话服务。结合仓库内的 LangChain 接入与 Lora 微调教程即可将 Gemma-2-9b-it 从能部署推进到能接入应用、能按需定制的完整生产链路。【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考