前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 modelscope 在离线环境部署模型服务关键点

使用 modelscope 在离线环境部署模型服务关键点

作者头像
AlphaHinex
发布2024-05-20 14:39:25
8360
发布2024-05-20 14:39:25
举报
文章被收录于专栏:周拱壹卒

在 ModelScope 的 本地启动服务[1] 文档中,介绍了使用 modelscope server 发布模型服务的方法。简单来说,就是执行如下命令:

代码语言:javascript
复制
modelscope server --model_id=qwen/Qwen-7B-Chat --revision=v1.0.5

但在离线环境中使用上述命令时,可能会遇到各种问题。本文以使用 modelscope 最近的(2024-04-27)发布版本 v1.14.0[2] 为例,介绍在离线环境中部署模型服务的关键点。

TL;DR

共有如下五个关键点需要注意:

  1. 模型文件的路径中必须包含 .mdl.msc.mv 三个文件;
  2. 需修改 modelscope/hub /file_download.py,将 local_files_only: Optional[bool] = False, 改为 local_files_only: Optional[bool] = True,
  3. 需修改 modelscope/utils/input_output.py[3],将 model=model_id, 修改为 model=cfg.filename.replace('/configuration.json', ''),
  4. 需修改 modelscope/utils/pipeline_schema.json[4],将 倒数第二行[5] 的 }, 改为 }
  5. 启动命令中必须指定 --revision 参数,如无值可设置为 --revision=

下载模型文件若直接通过 git clone 克隆模型仓库地址,则不包含必须的三个 .m* 文件;需使用 modelscope 提供的 snapshot_download 方法下载:

代码语言:javascript
复制
python -c "from modelscope import snapshot_download; snapshot_download('qwen/Qwen1.5-7B-Chat', cache_dir='qwen1.5-7b-chat')"

注意:以上代码修改内容在 v1.14.0 版本 modelscope 库中验证有效,版本不同时可能需要根据实际情况做出调整。

在线 Notebook 环境模拟验证

接下来使用魔搭社区提供的在线 CPU Notebook 环境[6] 对离线环境部署模型服务进行模拟验证。

notebook

启动 Notebook 后在 Launcher 中打开一个 Terminal:

terminal

检查 modelscope 版本

代码语言:javascript
复制
$ pip show modelscope
Name: modelscope
Version: 1.14.0
Summary: ModelScope: bring the notion of Model-as-a-Service to life.
Home-page: https://github.com/modelscope/modelscope
Author: ModelScope team
Author-email: contact@modelscope.cn
License: Apache License 2.0
Location: /opt/conda/lib/python3.10/site-packages
Requires: addict, attrs, datasets, einops, filelock, gast, huggingface-hub, numpy, oss2, pandas, Pillow, pyarrow, python-dateutil, pyyaml, requests, scipy, setuptools, simplejson, sortedcontainers, tqdm, urllib3, yapf
Required-by: adaseq, ms-swift

下载模型文件

为方便演示,下载一个小模型:

代码语言:javascript
复制
python -c "from modelscope import snapshot_download; snapshot_download('damo/nlp_structbert_word-segmentation_chinese-base', cache_dir='cache')"

因未指定下载版本,下载时会有类似如下提示:

代码语言:javascript
复制
WARNING - Model revision not specified, use revision: v1.0.3

记住这个版本号以备后续使用。

确认 .m* 文件存在:

代码语言:javascript
复制
$ ls -al cache/damo/nlp_structbert_word-segmentation_chinese-base/.m*
-rw-r--r-- 1 root root  73  5月 18 21:58 cache/damo/nlp_structbert_word-segmentation_chinese-base/.mdl
-rw------- 1 root root 596  5月 18 21:58 cache/damo/nlp_structbert_word-segmentation_chinese-base/.msc
-rw-r--r-- 1 root root  36  5月 18 21:58 cache/damo/nlp_structbert_word-segmentation_chinese-base/.mv

设置 host 模拟离线环境

代码语言:javascript
复制
echo '0.0.0.0 www.modelscope.cn' >> /etc/hosts

验证默认情况下无法启动服务

代码语言:javascript
复制
MODELSCOPE_CACHE=/mnt/workspace/cache modelscope server --model_id=damo/nlp_structbert_word-segmentation_chinese-base --revision=v1.0.3

会有如下报错信息:

代码语言:javascript
复制
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.modelscope.cn', port=443): Max retries exceeded with url: /api/v1/models/damo/nlp_structbert_word-segmentation_chinese-base/revisions (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fefa2dfc2e0>: Failed to establish a new connection: [Errno 111] Connection refused'))

修改 file_download.py

代码语言:javascript
复制
$ cat /opt/conda/lib/python3.10/site-packages/modelscope/hub/file_download.py|grep "local_files_only: Optional\[bool\]"
    local_files_only: Optional[bool] = False,
代码语言:javascript
复制
$ sed -i 's/local_files_only: Optional\[bool\] = False,/local_files_only: Optional\[bool\] = True,/' /opt/conda/lib/python3.10/site-packages/modelscope/hub/file_download.py
代码语言:javascript
复制
$ cat /opt/conda/lib/python3.10/site-packages/modelscope/hub/file_download.py|grep "local_files_only: Optional\[bool\]"
    local_files_only: Optional[bool] = True,

修改 input_output.py

代码语言:javascript
复制
$ cat /opt/conda/lib/python3.10/site-packages/modelscope/utils/input_output.py|grep "model=model_id,"
    model=model_id,
代码语言:javascript
复制
$ sed -i "s#model=model_id,#model=cfg.filename.replace('/configuration.json', ''),#" /opt/conda/lib/python3.10/site-packages/modelscope/utils/input_output.py
代码语言:javascript
复制
$ cat /opt/conda/lib/python3.10/site-packages/modelscope/utils/input_output.py|grep "model="
    model=cfg.filename.replace('/configuration.json', ''),

修改 pipeline_schema.json

代码语言:javascript
复制
$ cat /opt/conda/lib/python3.10/site-packages/modelscope/utils/pipeline_schema.json|tail -n 2
    },
}
代码语言:javascript
复制
$ line_num=$(($(wc -l < /opt/conda/lib/python3.10/site-packages/modelscope/utils/pipeline_schema.json) - 1))
$ sed -i "${line_num}s/},/}/" /opt/conda/lib/python3.10/site-packages/modelscope/utils/pipeline_schema.json
代码语言:javascript
复制
$ cat /opt/conda/lib/python3.10/site-packages/modelscope/utils/pipeline_schema.json|tail -n 2
    }
}

启动服务

代码语言:javascript
复制
$ MODELSCOPE_CACHE=/mnt/workspace/cache modelscope server --model_id=damo/nlp_structbert_word-segmentation_chinese-base --revision=v1.0.3
...
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

点击终端中的 http://0.0.0.0:8000,会在浏览器中打开一个使用了代理域名地址的新 tab 页,后面加上 docs 即可打开 Swagger 页面:

swagger

参考资料

[1]

本地启动服务: https://modelscope.cn/docs/本地启动服务

[2]

v1.14.0: https://github.com/modelscope/modelscope/releases/tag/v1.14.0

[3]

modelscope/utils/input_output.py: https://github.com/modelscope/modelscope/blob/v1.14.0/modelscope/utils/input_output.py#L81

[4]

modelscope/utils/pipeline_schema.json: https://github.com/modelscope/modelscope/blob/v1.14.0/modelscope/utils/pipeline_schema.json#L3835

[5]

倒数第二行: https://github.com/modelscope/modelscope/pull/859

[6]

Notebook 环境: https://modelscope.cn/my/mynotebook/preset

PaddleNLP 离线使用已下载好的社区模型

无外网环境部署 AgentFabric 及使用 AgentFabric 构建的 Agent

用 PaddleNLP 结合 CodeGen 实现离线 GitHub Copilot

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 周拱壹卒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TL;DR
  • 在线 Notebook 环境模拟验证
    • 检查 modelscope 版本
      • 下载模型文件
        • 设置 host 模拟离线环境
          • 验证默认情况下无法启动服务
            • 修改 file_download.py
              • 修改 input_output.py
                • 修改 pipeline_schema.json
                  • 启动服务
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档