十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 FastAPI 部署 Gemma-2B-Instruct 模型 API 服务:从环境准备到 curl/requests 调用全流程指南

基于 FastAPI 部署 Gemma-2B-Instruct 模型 API 服务:从环境准备到 curl/requests 调用全流程指南 大模型人工智能教程本地部署微调【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址https://gitcode.com/datawhalechina/self-llm点击查看免费下载导读本文是《开源大模型食用指南》self-llm项目中 Gemma 系列教程的实战篇以 01-Gemma-2B-Instruct FastApi 部署调用 为核心完整讲解如何在 Linux GPU 云服务器上从零搭建 Gemma-2B-Instruct 模型的 HTTP API 服务。读完本文你将掌握云服务器镜像选择与 pip 换源、基于 ModelScope 的模型下载、基于 FastAPI Uvicorn Transformers 的推理服务编写以及使用 curl 与 Python requests 两种方式调用 API 的完整技能可直接复用于其他开源大模型的部署。一、技术方案总览Gemma 是 Google 开源的轻量级大语言模型家族其中 Gemma-2B-Instruct 是经过指令微调的 2B 参数对话版本。由于单卡显存占用可控它非常适合用于学习大模型推理服务化的完整链路。本教程采用的部署栈为FastAPI基于 Starlette 与 Pydantic 的高性能 Python Web 框架负责暴露 HTTP 接口UvicornASGI 服务器承载 FastAPI 应用的网络服务TransformersHugging Face 生态的核心库负责加载 Gemma 模型权重并执行文本生成ModelScope魔搭国内模型托管平台通过其snapshot_download接口可高速下载模型权重。该链路与仓库中其他模型的 FastAPI 部署文档如 DeepSeek、Qwen2保持一致掌握了本文的范式即可举一反三。二、环境准备租用 GPU 云服务器2.1 镜像选择在 AutoDL 等云平台租赁一张 3090 等 24G 显存的显卡机器。创建实例时镜像按如下组合选择PyTorch -- 2.1.0 -- 3.10 (ubuntu22.04) -- 12.1即 PyTorch 2.1.0 框架、Python 3.10、Ubuntu 22.04 操作系统、CUDA 12.1如下图所示实例创建完成后打开服务器自带的 JupyterLab在其中打开终端即可开始后续的环境配置、模型下载与运行演示。2.2 pip 换源与依赖安装为避免网络原因导致依赖安装缓慢先升级 pip 并将默认源切换为清华 PyPI 镜像随后安装本教程所需的全部依赖各库均指定了教程验证过的版本号# 升级pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install fastapi0.110.2 pip install uvicorn0.29.0 pip install requests2.31.0 pip install modelscope1.11.0 pip install transformers4.40.0 pip install accelerate0.29.3各依赖的角色说明依赖包版本作用fastapi0.110.2Web 框架定义路由与请求/响应处理uvicorn0.29.0ASGI 服务器让 FastAPI 应用真正跑起来requests2.31.0客户端库用于本地调用 API 验证服务modelscope1.11.0模型下载与加载入口transformers4.40.0模型结构、分词器与文本生成 pipelineaccelerate0.29.3多卡/自动设备映射device_mapauto的底层支撑换源是通用技巧仓库中 01-pip、conda换源 一文还提供了临时-i参数换源、conda 换源等更多方案可一并参考。三、模型下载ModelScope snapshot_download使用 ModelScope 的snapshot_download函数即可下载 Gemma-2B-Instruct 模型第一个参数Lucachen/gemma2b为模型在 ModelScope 上的仓库名称该仓库托管了 Gemma-2B 的指令微调版本权重参数cache_dir为模型保存路径建议使用绝对路径参数revision指定版本分支此处为master。在/root/autodl-tmp路径下新建model_download.py文件并写入以下内容粘贴后及时保存import torch from modelscope import snapshot_download, AutoModel, AutoTokenizer import os model_dir snapshot_download(Lucachen/gemma2b, cache_dir/root/autodl-tmp, revisionmaster)运行命令执行下载python /root/autodl-tmp/model_download.py模型大小约为 15GB在平台内网环境下下载大约需要 2 分钟。下载完成后权重将保存在/root/autodl-tmp/Lucachen/gemma2b目录供后续代码直接加载。若需从其他渠道获取权重仓库的 03-模型下载 一节还汇总了 Hugging Face CLI、HF 镜像hf-mirror.com、git-lfs、OpenXlab 等多种下载方式其中 HF 镜像方案通过设置环境变量HF_ENDPOINT实现适合网络受限场景。四、代码准备编写 FastAPI 推理服务在/root/autodl-tmp下新建api.py写入以下带详细注释的代码。该文件将完成三件事加载模型与分词器、定义 POST 接口处理对话请求、启动 Uvicorn 服务。from fastapi import FastAPI, Request from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline 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, pipeline # 声明全局变量以便在函数内部使用模型和分词器 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) # 获取请求中的提示 history json_post_list.get(history, []) # 获取请求中的历史记录 messages [ # {role: system, content: You are a helpful assistant.}, {role: user, content: prompt} ] # 调用模型进行对话生成 prompt pipeline.tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) outputs pipeline( prompt, max_new_tokens1024, add_special_tokensTrue, do_sampleTrue, temperature0.7, top_k50, top_p0.95 ) response outputs[0][generated_text][len(prompt):] 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__: # 加载预训练的分词器和模型 model_name_or_path /root/autodl-tmp/Lucachen/gemma2b tokenizer AutoTokenizer.from_pretrained(model_name_or_path) model AutoModelForCausalLM.from_pretrained(model_name_or_path, device_mapauto, torch_dtypetorch.bfloat16).cuda() pipeline pipeline(text-generation,modelmodel_name_or_path,model_kwargs{torch_dtype: torch.bfloat16},devicecuda) # 启动FastAPI应用 # 用6006端口可以将autodl的端口映射到本地从而在本地使用api uvicorn.run(app, host0.0.0.0, port6006, workers1) # 在指定端口和主机上启动应用4.1 关键实现细节解读1模型加载策略主函数入口处采用两种加载路径先是AutoTokenizerAutoModelForCausalLM显式加载一次同时又以pipeline(text-generation, ...)的方式再次加载生成管线。torch_dtypetorch.bfloat16以 BF16 半精度加载权重显著降低显存占用device_mapauto交由 accelerate 自动分配设备。日常部署实践中二者保留其一即可教程保留两份是为了兼顾两种使用习惯。2Chat Template 应用apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue)将[{role: user, content: prompt}]结构转换为 Gemma 模型要求的对话模板Gemma 使用start_of_turn/end_of_turn形式的角色标记并追加生成提示符。这与仓库中 04-Gemma-2B-Instruct Lora微调 数据格式化一节展示的 Gemma Prompt Template 完全一致。3生成参数max_new_tokens1024限制新生成的最大 token 数do_sampleTrue开启随机采样temperature0.7、top_k50、top_p0.95共同控制采样的多样性。生成完成后通过outputs[0][generated_text][len(prompt):]从完整输出中截取新增部分作为最终回答。4显存管理每次请求处理完毕后调用torch_gc()torch.cuda.empty_cache()清空未使用的缓存块torch.cuda.ipc_collect()回收跨进程共享内存碎片避免长时运行中显存持续增长。5服务监听uvicorn.run(app, host0.0.0.0, port6006, workers1)将服务绑定到0.0.0.0:6006。选择 6006 端口是为了便于通过 AutoDL 的端口映射能力将服务暴露到本地映射方法可参考仓库的 02-AutoDL开放端口 文档。五、启动 API 服务在终端执行以下命令启动服务cd /root/autodl-tmp python api.py首次启动需要加载 15GB 模型权重等待片刻后若终端出现如下信息说明服务启动成功INFO: Started server process [2709] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:6006 (Press CTRLC to quit)六、调用 APIcurl 与 Python requests 双方案服务默认部署在 6006 端口通过 POST 方法调用请求体为 JSON其中prompt字段为用户输入。6.1 方案一curl 命令行调用curl -X POST http://127.0.0.1:6006 \ -H Content-Type: application/json \ -d {prompt: 你好}返回的 JSON 结构如下{ response: 你好我也很高兴见到你有什么问题或话题想聊天吗你好很高兴你来了。请问您有什么问题或需要我帮助的吗, status: 200, time: 2024-04-20 23:11:00 }响应中response为模型生成的回答文本status为业务状态码time为服务端处理时间。其中status、time字段的加入是仓库内 FastAPI 部署文档的通用约定方便客户端做状态判断与日志记录。6.2 方案二Python requests 调用将下面的代码保存为 Python 脚本如api_test.py并运行即可在脚本中复用 APIimport 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(你好))运行效果如下两种调用方式均以http://127.0.0.1:6006为目标。若在本地通过端口映射访问云端服务则将该地址替换为映射后的本地地址如http://localhost:6006即可。七、延伸从 API 到更多应用形态完成 FastAPI 部署后同一份本地模型权重还可以按仓库中 Gemma 目录下的其他文档扩展出多种应用形态形成完整的部署矩阵LangChain 接入参考 02-Gemma-2B-Instruct langchain 接入继承langchain.llms.base.LLM自定义Gemma2B类并重写_call方法即可将本地模型无缝接入 LangChain 生态构建知识库助手等上层应用Web Demo参考 03-Gemma-2B-Instruct WebDemo 部署基于 Streamlit 编写chatBot.py运行streamlit run /root/autodl-tmp/chatBot.py --server.address 127.0.0.1 --server.port 6006即可获得可视化聊天界面Lora 微调参考 04-Gemma-2B-Instruct Lora微调基于peft与Trainer对 Gemma 进行高效微调实现领域化如甄嬛风格对话的专属模型。这三份文档与本教程共享相同的环境准备、镜像选择和模型下载步骤其模型加载与apply_chat_template用法也高度一致说明 Gemma-2B 的部署链路在API 服务 / LangChain 应用 / Web 交互 / 微调四个场景间可平滑迁移。此外仓库 support_model 中标注了 Gemma 系列各教程的维护信息读者可据此了解文档的完整覆盖范围。八、总结本文以 Gemma-2B-Instruct 为例完整走通了GPU 云服务器环境准备 → ModelScope 模型下载 → FastAPI 服务编写 → curl/requests 双方案调用的大模型 API 部署全流程。核心要点可归纳为环境上选用 PyTorch 2.1.0 / Python 3.10 / CUDA 12.1 镜像并完成 pip 换源可大幅降低安装成本模型上借助 ModelScopesnapshot_download解决权重获取问题BF16 半精度 device_mapauto控制显存开销服务上FastAPI Uvicorn 提供轻量稳定的 HTTP 接口apply_chat_template保证对话格式正确torch_gc()保证长时运行的显存健康调用上curl 适合快速验证requests 适合集成进 Python 应用。这套范式不限于 Gemma可平移至仓库中其余数十个开源模型的 FastAPI 部署文档是快速上手开源大模型服务化的最佳切入点。赞分享大模型人工智能教程本地部署微调【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址https://gitcode.com/datawhalechina/self-llm点击查看免费下载相关推荐Qwen2.5-7B-Instruct FastAPI 部署调用实战从环境搭建到本地模型 API 服务化Qwen2.5 7B Instruct FastAPI 部署调用实战从环境搭建到本地模型 API 服务化 本文以《开源大模型食用指南》中 Qwen2.5 7B教程大模型本地部署微调LLaMA3.1-8B-Instruct FastAPI 部署调用实战指南基于 self-llm 项目从环境配置到 API 服务上线LLaMA3.1 8B Instruct FastAPI 部署调用实战指南基于 self llm 项目从环境配置到 API 服务上线 LLaMA 3.1 是教程大模型本地部署微调Gemma-2B-Instruct FastAPI 部署调用实战在 self-llm 中构建 HTTP 对话服务Gemma 2B Instruct FastAPI 部署调用实战在 self llm 中构建 HTTP 对话服务 本文基于开源仓库《开源大模型食用指南》se教程大模型本地部署微调创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表