
InternLM-Chat-7B 对话 Web Demo 部署指南基于 Streamlit 的本地 Web 对话全流程实战【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llm本篇指南以 Datawhale「开源大模型食用指南」self-llm仓库中的 InternLM 系列教程为依托完整演示如何在 AutoDL 平台上从零搭建 InternLM-Chat-7B 的 Web 对话 Demo涵盖 GPU 实例与 Python 环境准备、基于 ModelScope 的模型下载、官方仓库克隆与 commit 锁定、web_demo.py本地路径替换以及streamlit服务的启动与端口映射。读完本篇你将具备在 24G 显存级 GPU 机器上独立复现一个可交互的 InternLM-Chat-7B 对话页面的完整能力。一、环境准备租用 GPU 实例并安装依赖1.1 创建 AutoDL GPU 实例与镜像选择InternLM-Chat-7B 是 7B 参数规模的自回归对话模型其权重以 bfloat16 半精度加载时约占用 14 GB 显存因此推荐在 AutoDL 平台租用一张 3090 等24G 显存的显卡机器为模型权重与推理时的 KV Cache 留出充足空间。创建实例时镜像按如下顺序选择与仓库教程保持一致的经典组合PyTorch -- 1.11.0 -- 3.8(ubuntu20.04) -- 11.3即框架选 PyTorch 1.11.0、Python 版本选 3.8Ubuntu 20.04 系统、CUDA 版本选 11.3。该镜像自带 NVIDIA 驱动与 CUDA 运行时后续安装的transformers、modelscope等包可直接复用系统 CUDA 环境。实例启动后打开服务器自带的JupyterLab并在其中开启一个终端Terminal后续的环境配置、模型下载与 Demo 运行均在该终端中完成。1.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 modelscope1.9.5 pip install transformers4.35.2 pip install streamlit1.24.0 pip install sentencepiece0.1.99 pip install accelerate0.24.1各依赖包在本次部署中扮演的角色如下表所示版本号均来自仓库教程见 models/InternLM/03-InternLM-Chat-7B.md固定版本有助于复现依赖包版本在本部署中的作用modelscope1.9.5魔搭ModelScope模型库 SDK用于snapshot_download下载模型权重transformers4.35.2HuggingFace 生态核心库负责加载模型与分词器AutoModel/AutoTokenizerstreamlit1.24.0Python Web 应用框架用于渲染对话页面并驱动前端交互sentencepiece0.1.99SentencePiece 分词器依赖InternLM 的词表编码依赖该库accelerate0.24.1模型加载加速与显存管理工具配合transformers使用二、模型下载使用 ModelScope 拉取 InternLM-Chat-7BInternLM-Chat-7B 的权重托管在魔搭社区ModelScope上使用其中的snapshot_download函数即可一键下载。该函数的第一个参数为模型名称参数cache_dir指定模型的下载路径。在/root/autodl-tmp路径下新建download.py文件/root/autodl-tmp为 AutoDL 的数据盘容量更大且持久化保存输入以下内容并保存import torch from modelscope import snapshot_download, AutoModel, AutoTokenizer import os model_dir snapshot_download(Shanghai_AI_Laboratory/internlm-chat-7b, cache_dir/root/autodl-tmp, revisionmaster)其中Shanghai_AI_Laboratory/internlm-chat-7b上海人工智能实验室在 ModelScope 上发布的模型仓库 IDrevisionmaster指定拉取 master 分支主干版本的权重cache_dir/root/autodl-tmp权重将被下载到/root/autodl-tmp/Shanghai_AI_Laboratory/internlm-chat-7b目录下这也是后续所有脚本引用模型的统一本地路径。保存后运行下载命令python /root/autodl-tmp/download.py模型大小约14 GB视网络状况下载大概需要1020 分钟。下载完成后请确认目录/root/autodl-tmp/Shanghai_AI_Laboratory/internlm-chat-7b下存在完整的模型文件如pytorch_model*.bin、tokenizer.model、config.json、modeling_internlm.py等。三、代码准备克隆官方仓库并锁定 commit3.1 开启学术镜像加速并克隆仓库为了让git clone大型仓库更顺畅先开启 AutoDL 平台自带的学术镜像加速详细用法可参考 AutoDL 平台的学术资源加速文档然后切换路径并克隆 InternLM 官方仓库source /etc/network_turbocd /root/autodl-tmp git clone https://github.com/InternLM/InternLM.git3.2 切换到与教程一致的 commit为保证与本仓库教程的复现结果一致需要将克隆下来的代码切换到教程锁定的 commit 版本cd InternLM git checkout 3028f07cb79e5b1d7342f4ad8d11efad3fd13d17锁定 commit 的意义在于web_demo.py的代码结构、model.chat的接口签名以及trust_remote_code所需的远端建模代码在不同版本间可能存在差异固定版本可以避免因仓库更新导致 Demo 无法运行。3.3 取消学术加速克隆完成后务必关闭学术镜像加速因为该加速代理可能对正常网络请求造成干扰影响后续下载其他模型或访问外网资源unset http_proxy unset https_proxy3.4 修改 web_demo.py 中的模型路径官方仓库自带的web_demo.py默认指向线上模型或默认路径需要将其修改为本地已下载的模型路径。编辑/root/autodl-tmp/InternLM/web_demo.py将第 29 行和 33 行处的模型路径更换为/root/autodl-tmp/Shanghai_AI_Laboratory/internlm-chat-7b这两处分别对应web_demo.py中模型Model与分词器Tokenizer的加载位置。InternLM 的模型结构代码通过trust_remote_codeTrue从模型目录下的modeling_internlm.py动态加载因此模型目录必须完整包含远端代码文件这也是必须使用官方发布目录而非只拷贝权重的原因。四、运行 Web Demo启动服务、映射端口并开始对话4.1 启动 Streamlit 推理服务在终端执行以下命令启动推理服务cd /root/autodl-tmp/InternLM streamlit run web_demo.py --server.address 127.0.0.1 --server.port 6006命令参数说明--server.address 127.0.0.1将服务绑定到本机回环地址仅允许本机访问避免直接暴露到公网--server.port 6006指定服务监听端口为6006该端口也是后续 AutoDL 端口映射时使用的一致端口。4.2 将 AutoDL 端口映射到本地由于服务运行在云服务器上需要在 AutoDL 控制台为当前实例的6006端口配置自定义服务端口映射把服务器6006端口映射到本机的http://localhost:6006/。这样在本地浏览器中访问http://localhost:6006即可打开对话页面。本仓库中所有 Web Demo 类教程如 FastAPI、Lagent、LangChain 知识库等的端口映射方法完全相同只需将 6006 换成对应服务端口即可。4.3 打开页面触发模型加载需要注意要等浏览器打开http://localhost:6006页面后模型才会真正开始加载。这是因为web_demo.py使用了 Streamlit 的缓存机制st.cache_resource一类装饰器对模型加载函数做惰性求值只有页面被首次访问、渲染流程真正调用到加载函数时14 GB 的权重才会被读取进显存。因此启动命令后终端会先显示服务就绪信息待页面打开后才会出现模型加载日志加载期间请耐心等待。4.4 与 InternLM-Chat-7B 对话模型加载完成后页面即可正常输入问题与 InternLM-Chat-7B 进行多轮对话页面左侧通常还提供Max Length最大生成长度、Top P、Temperature等生成参数调节选项方便直观感受不同采样参数对生成结果的影响。至此一个完整的 InternLM-Chat-7B Web 对话 Demo 即部署成功。五、原理纵深web_demo.py 背后的模型加载与对话调用链为了让读者不仅“跑得起来”还能理解其底层逻辑这里结合仓库中 01-InternLM-Chat-7B Transformers 部署调用.md 的示例代码还原web_demo.py的核心调用链。5.1 模型加载半精度 CUDAweb_demo.py中模型加载的核心逻辑与仓库教程中的trans.py一致本质上是from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_path, trust_remote_codeTrue ).to(torch.bfloat16).cuda() model model.eval()trust_remote_codeTrue允许从模型目录加载自定义的modeling_internlm.py等远端代码这是 InternLM 这类非标准架构模型正常加载的前提.to(torch.bfloat16)将权重转换为 bfloat16 半精度使 7B 模型在 24G 显存上能够流畅推理.cuda()与model.eval()将模型送入 GPU 并切换为评估模式关闭 Dropout 等训练期行为。5.2 对话生成model.chat 接口页面每次提交问题最终都会落到模型自带的chat接口上其完整签名参考 02-internLM-Chat-7B FastApi.md 中的api.py为response, history model.chat( tokenizer, prompt, historyhistory, max_lengthmax_length if max_length else 2048, # 最大生成长度默认 2048 top_ptop_p if top_p else 0.7, # 核采样阈值默认 0.7 temperaturetemperature if temperature else 0.95 # 采样温度默认 0.95 )从源码结构看chat方法内部会基于history历史对话与当前prompt拼接出符合 InternLM 对话格式的输入序列经分词、采样生成后返回response模型回复与更新后的history供下一轮继续传入。这也是web_demo.py支持多轮对话的关键每一轮都把上一轮返回的history原样传入下一轮调用从而实现上下文连贯。六、从 Web Demo 延伸同系列其他部署形态速览web_demo.py只是 InternLM 部署体系中的一种形态。本仓库models/InternLM目录下还提供了同一模型的其余部署教程读者可按需组合部署形态仓库文档适用场景Transformers 脚本直调01-InternLM-Chat-7B Transformers 部署调用.md快速验证模型对话能力脚本级最小复现FastAPI 服务化02-internLM-Chat-7B FastApi.md以 REST API 形式对外提供服务可被其他程序以curl或requests调用Lagent 智能体04-LagentInternLM-Chat-7B-V1.1.md为模型接入 Python 解释器等工具实现 ReAct 智能体推理LangChain 知识库助手06-InternLM接入LangChain搭建知识库助手.md基于本地向量库的检索增强问答RAG构建专属知识库问答系统这些文档共用本教程第一节的环境准备与第二节的模型下载流程FastAPI 版本额外安装fastapi、uvicorn、requestsLangChain 版本额外安装langchain、gradio、chromadb等因此完成本篇的 Web Demo 后环境基本可无缝迁移到其他形态。七、常见问题与注意事项模型为何不在启动命令后立即加载这是 Streamlit 惰性缓存加载机制的预期行为必须打开浏览器页面后才会触发权重加载属正常现象耐心等待加载日志即可。端口映射后本地访问不通请确认streamlit启动命令中的--server.port与 AutoDL 控制台映射的端口一致本文均为6006且映射为自定义服务端口而非 SSH 端口。clone 或下载缓慢使用source /etc/network_turbo开启学术加速完成后务必unset http_proxy unset https_proxy关闭避免代理残留影响后续操作。无法复现对话效果请确认git checkout到了教程指定的 commit3028f07cb79e5b1d7342f4ad8d11efad3fd13d17且web_demo.py第 29、33 行的模型路径已正确指向/root/autodl-tmp/Shanghai_AI_Laboratory/internlm-chat-7b。显存不足本教程基于 24G 显存机型设计如使用更小显存的机器可考虑关闭页面中的超长上下文、调低Max Length或参考仓库中其他模型的量化如 4bit QLoRA方案后再行部署。至此你已完整掌握 InternLM-Chat-7B 的 Web 对话部署全流程并理解了其背后模型加载与对话调用的核心机制可在此基础上继续探索 FastAPI 服务化、Lagent 智能体与 LangChain 知识库等进阶玩法。【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调全参数/Lora、部署国内外开源大模型LLM/多模态大模型MLLM教程项目地址: https://gitcode.com/datawhalechina/self-llm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考