部署ChatGLM2-6B

更新时间:

本案例以 “ChatGLM2-6B” 模型为例,指导如何在平台开发环境中部署模型。

ChatGLM2-6B:是一个开源的、支持中英双语的对话语言模型,由清华大学团队开发,旨在改进对话机器人的语言生成质量和逻辑。ChatGLM2-6B 已经在大规模数据集上进行过训练,您可以直接部署、体验与机器人的高质量对话,也可以用自有数据集对其微调,得到自己的专属大模型。详情可参考 ChatGLM2-6B 官方 (opens new window)

# 创建项目

  1. 单击平台项目页右上角的 创建项目,随后在弹框中配置项目的基本信息。

    • 项目名称:可自定义,如 “ChatGLM2-6B体验”。
    • 项目描述:如 “部署并体验与ChatGLM2-6B对话”。

  2. 单击 确定,项目创建成功,并进入 初始化开发环境 引导页。

  3. 初始化开发环境 页中配置如下信息,其他参数保持默认值。

    • 资源配置:选择 P1.medium,小于该配置,模型可能加载失败。
    • 镜像:选择 公开 镜像 ChatGLM2_6B(作者为 “趋动云小助手”)。
    • 数据:选择 社区 > 全部 下的 AdvertiseGen 数据集。
    • 模型:选择 公开 下的 chatglm2-6b(作者为 “趋动云小助手”)。
    • 自动停止(高级设置 中):选择 2小时
    • 开放端口(高级设置 中):添加 1 个端口用于网页形式访问部署好的 ChatGLM2-6B。内部端口,填写 1025;备注为 “chatglm2-6b 网页形式访问”。
  4. 随后单击右下角 我要上传代码,暂不启动,进入 项目代码 页。

# 上传代码

  1. 项目代码 页中单击 按钮。

  2. 选择 网页上传文件,并上传 已获取的代码 (opens new window)

    说明:自行 git clone https://github.com/THUDM/ChatGLM2-6B 获取的代码需注意修改代码中的模型路径

  3. 在代码压缩包后的 ... 中选择 解压缩,解压刚才上传的代码包。

  4. 解压完成后,单击 结束编辑,退出代码编辑模式。

# 部署ChatGLM2-6B

  1. 单击右上角 启动开发环境,并等待开发环境启动完成。

  2. 单击 进入开发环境,默认进入 JupyterLab 页面。

  3. 顶部切换至 网页终端

  4. 执行如下命令,进入 ChatGLM2-6B 目录并部署模型。

    说明:如果使用您自己获取的代码,则需相应的进入 web_demo.py 所在目录执行,可能未必是 ChatGLM2-6B 目录。

    cd ChatGLM2-6B
    python web_demo.py
    

    等待系统返回类似信息,则加载成功。

    Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7/7 [01:29<00:00, 12.73s/it]
    /gemini/code/ChatGLM2-6B/web_demo.py:89: GradioDeprecationWarning: The `style` method is deprecated. Please set these arguments in the constructor instead.
      user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(
    Running on local URL:  http://127.0.0.1:15432
    Running on public URL: https://bd2a91f942ff33eecf.gradio.live
    
    This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)
    
  5. 浏览器中输入访问地址,进入 ChatGLM2-6B 问答界面。

    • 返回如下信息,则访问地址为第 5 行的 https://...gradio.live

    • 返回如下信息,则内网穿透失败,访问地址为 http:外部访问地址

      部分浏览器默认为 https 访问,因此可能会失败,可打开浏览器无痕模式再行访问。

  6. Input... 区域输入您的问题并 提交,等待 ChatGLM 返回给您答案。

    Tips
    首次提问,需稍微等待 20s 调取问答程序,然后再返回答案,后续问答无此限制。
    单击右下角 Clear History,可清空对话历史。

    至此,可确认部署成功。

# 其他参考

# 定制代码

若您不使用平台提供的代码,需参考如下描述,修改 web_demo.py 中如下两处信息并保存。

  • 修改模型地址
    替换如图所示处 THUDM/chatglm2-6b/gemini/pretrain/gemini/pretrain 为模型在开发环境中默认挂载的地址。

  • (可选)设置为本地运行该程序

    说明:为防止 frpc 内网穿透失败,增加此设置。公网访问某程序,需借助 frcp 进行内网穿透生成公网访问地址,而 frcp 需从国外源下载,可能存在下载失败的情况。

    最后一行增加 server_name='0.0.0.0', server_port=xx,修改后形如:

    demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0', server_port=1025)
    

    1025 为您添加的端口,需根据实际情况填写。

# 部署为命令行方式

以命令行形式加载模型并进行问答测试。

  1. 修改 cli_demo.py 中模型的地址,将 THUDM/chatglm2-6b 替换为 /gemini/pretrain

  2. 切换至 网页终端

  3. 执行如下命令唤醒交互式对话。

    python cli_demo.py
    

    等待最终 Loading checkpoint shards: 100% 且返回 用户: 字样,如图所示。

    说明:加载模型前会按顺序找库,优先路径下未安装则 warning 提示,若最终加载成功可忽略该提示。

    chatglm-6b_chatDemo

  4. 用户: 行输入您的问题并回车,等待 ChatGLM 回答您的问题。
    ChatGLM: 行若有相应信息返回,则环境准备完成。

    Tips: 输入 clear 可以清空对话历史,输入 stop 终止程序。
    首次提问,需稍微等待 20s 调取问答程序,然后再返回答案,后续问答无此限制。

# 异常处理

  1. 执行 python web_demo.py 加载模型时报错如下。
    Loading checkpoint shards:  71%|██████████████████████████████            | 5/7 [01:03<00:26, 13.37s/it]Killed
    
    Answer:可能是实例规格选择太小,请更换成更高的实例规格。