本文介绍在 ModelScope 社区上传模型的两种方式:
- 使用 Python SDK 创建并上传模型
- 使用 GIT 上传模型
准备#
在进行模型上传之前,请先完成账号注册、登陆。此外需要上传的模型内容,也请另外在本地模型文件夹准备好。
使用 Python SDK 创建并上传模型#
通过 ModelScope 的 Python SDK,您有多种方式可以方便地将模型上传到 ModelScope 平台。
前提条件#
-
确保您已经安装了
modelscope
库。如果没有安装,可以使用以下命令进行安装:pip install modelscope
-
在 SDK 中完成访问令牌登陆
from modelscope.hub.api import HubApi YOUR_ACCESS_TOKEN = '请从https://modelscope.cn/my/myaccesstoken 获取SDK令牌' api = HubApi() api.login(YOUR_ACCESS_TOKEN)
访问的SDK令牌(token)可前往【账号设置】->【访问令牌】获取。
步骤#
1. 创建模型库#
假设您的账户名是user
,期望的模型英文名称为my-test-model
from modelscope.hub.constants import Licenses, ModelVisibility owner_name = 'user' model_name = 'my-test-model' model_id = f"{owner_name}/{model_name}" api.create_model( model_id, visibility=ModelVisibility.PUBLIC, license=Licenses.APACHE_V2, chinese_name="我的测试模型" )
参数说明
字段名 | 必填 | 类型 | 描述 |
---|---|---|---|
model_id | 是 | str | 模型ID |
visibility | 否 | int | 模型的可见性,1-私有,5-公开,不填默认5 |
license | 否 | str | 模型的许可证,不填默认为Apache-2.0 |
chinese_name | 否 | str | 模型的中文名称,默认None |
更多的参数可以参见开源代码的接口文档。
2. 使用SDK上传模型#
通过文件接口上传#
ModelScope 库提供基于 http 的文件及文件夹上传接口,保障更稳定的上传体验,同时也对文件的大小、文件夹的数量进行必要的检查。
- 上传模型文件夹
api.upload_folder( repo_id=f"{owner_name}/{model_name}", folder_path='/path/to/your_model_dir', commit_message='upload model folder to repo', )
参数说明
字段名 | 必填 | 类型 | 描述 |
---|---|---|---|
repo_id | 是 | str | 模型ID,确保您的访问令牌具有上传至对应仓库的权限。 |
folder_path | 是 | str | 本地待上传文件夹的绝对路径 |
path_in_repo | 否 | str | 文件夹将被上传到的具体路径及设置的文件夹名称 |
commit_message | 否 | str | 此次上传提交所包含的更改信息 |
token | 否 | str | 有权限上传的用户token。前置已经登陆时,可缺省 |
repo_type | 否 | str | 仓库类型,不填默认为model |
allow_patterns | 否 | str | 允许上传的文件类型模板,例如*.json , 默认为None |
ignore_patterns | 否 | str | 上传时忽略的文件类型模板,例如*.log ,默认为None |
max_workers | 否 | int | 上传时开启的线程数量,默认为 min(8,os.cpu_count() + 4)) |
revision | 否 | str | 上传的分支,默认为"master" |
更多的参数可以参见开源代码的接口文档。
- 上传模型文件
api.upload_file( path_or_fileobj='/path/to/local/your_file.suffix', path_in_repo='repo_path/your_file.suffix', repo_id=f"{owner_name}/{model_name}", commit_message='upload model file to repo', )
参数说明
字段名 | 必填 | 类型 | 描述 |
---|---|---|---|
path_or_fileobj | 是 | str | 本地待上传文件的绝对路径 |
path_in_repo | 是 | str | 文件将被上传到的具体路径及设置的文件名称 |
repo_id | 是 | str | 模型ID,确保您的访问令牌具有上传至对应仓库的权限。 |
token | 否 | str | 有权限上传的用户token。前置已经登陆时,可缺省 |
repo_type | 否 | str | 仓库类型,如不填则默认为model |
commit_message | 否 | str | 本次提交的信息 |
commit_description | 否 | str | 本次提交的描述 |
buffer_size_mb | 否 | int | 计算hash时的buffer size,单位为MB,默认为1 |
tqdm_desc | 否 | str | 进度条描述,默认为[Uploading] |
disable_tqdm | 否 | bool | 是否禁用进度条,默认为False |
更多的参数可以参见开源代码的接口文档。
通过push_model接口上传#
ModelScope 库也提供基于 Git 封装的上传到模型repo的接口push_model
。但这个接口后续将被 deprecate ,推荐使用upload_folder
等基于 Http 上传的接口。
api.push_model( model_id=model_id, # 如果model_id对应的模型库不存在,将会被自动创建 model_dir="my_local_model_dir" # 指定本地模型所在目录 )
参数说明
字段名 | 必填 | 类型 | 描述 |
---|---|---|---|
model_id | 是 | str | 模型ID,确保您的访问令牌具有上传模型的权限 |
model_dir | 是 | str | 本地待上传模型的绝对路径 |
visibility | 否 | int | 新创建模型的可见性,1-私有,5-公开,不填默认为5。 |
license | 否 | str | 新创建模型的许可证,默认None。 |
chinese_name | 否 | str | 新创建模型的中文名称。默认None,且前端展示为英文名称 |
commit_message | 否 | str | 推送请求的提交信息,默认None |
更多的参数可以参见开源代码的接口文档。
3. 使用 CLI 工具上传#
在安装完成modelscope
库后,您也可以直接使用 CLI 命令行完成模型文件夹或文件的上传。假定 owner_name 为您期望上传的用户账户名或组织名,repo_name 为模型英文名称,即 owner_name/repo_name 为模型ID。
# 登陆 modelscope login --token Your-Modelscope-Token # 上传文件夹 modelscope upload owner_name/repo_name /path/to/your_folder # 上传文件 modelscope upload owner_name/repo_name /path/to/your_file.suffix data/your_file.suffix --repo-type model # 完整用法示例 modelscope upload [repo_id] [local_path] [path_in_repo] --repo-type model --include '*.bin' --exclude '*.log' --commit-message 'init' --commit-description 'my first commit' --token 'xxx-xxx' --max-workers 16 --endpoint 'https://www.modelscope.cn'
参数说明
字段名 | 必填 | 描述 |
---|---|---|
repo_id | 是 | 位置参数,上传的目标魔搭仓库ID,如 user_name/repo_name |
local_path | 是 | 位置参数,待上传的本地文件或文件夹路径 |
path_in_repo | 是 | 位置参数,指定上传至魔搭仓库的文件夹或文件具体路径,包括路径及文件夹或文件具体名称 |
repo-type | 否 | --repo-type 'model' 默认为 model |
include | 否 | 指定上传文件中应该包含文件类型的模板,例如--include '*.safetensors' 默认为None |
exclude | 否 | 指定上传文件中应该排除掉的文件类型模板,例如--exclude '*.log' 默认为None |
commit-message | 否 | 提交信息 例如--commit-message 'init' 默认为None |
commit-description | 否 | 本地提交的描述信息,例如--commit-description 'my first commit' 默认为None |
token | 否 | SDK token,--token 'xxx-xxx' 默认为None,获取来源:魔搭社区 |
max-workers | 否 | 上传所用的线程数,--max-workers 16 默认为 min(8,os.cpu_count() + 4) |
endpoint | 否 | 服务端点,--endpoint 'https://www.modelscope.cn' 默认值:https://www.modelscope.cn |
您也可以使用modelscope upload --help
查看 CLI 工具的详细参数。
使用 GIT 上传模型#
您可以通过 Git 命令将本地模型同步至远程仓库。
前提条件#
请确保安装Git
和Git LFS
。
步骤#
1. 通过ModelScope站点页面创建模型库#
在 Modelscope 首页右上角「个人头像」处找到“创建模型”的快速入口,点击进入创建模型界面。 根据页面指引,填写必要的基础信息即可提交创建。详细创建流程请参考:创建自己的模型库
2. 通过 GIT 完成本地模型上传#
-
远程模型仓库克隆
假设您的账户名是
user
,模型名称为my-test-model
:git lfs install git clone https://oauth2:YOUR-GIT-TOKEN@www.modelscope.cn/user/my-test-model.git
为了方便您后续的模型上传,请在git clone阶段,就直接提供Git token。您可以从平台Git 访问令牌页面,获取您的Git token。
-
将您的模型文件,移动到clone下来的模型目录中,并通过
git add
,git commit
,git push
等操作完成模型的上传。
注意事项#
- 上传文件容量限制:
- 单个文件大小不得超过 50 GB
- 全部文件总数不得超过 100,000 个
- 单个子文件夹内文件总数不得超过 10,000 个
- 未标记为 LFS 的所有文件总大小不得超过 500 MB
为了确保上传过程的顺畅和高效,当单个文件大小超过5MB,或者所有文件的总大小超过500MB时,我们推荐使用
GIT LFS
来上传文件;
-
通过文件/文件夹上传接口时,符合以下条件自动标记为 GIT LFS 上传:
- 文件大小超过 5 MB
- 平台会自动利用 LFS 上传以下后缀的文件:
*.7z、*.arrow、*.bin、*.bin.*、*.bz2、*.ftz、*.gz、*.h5、*.joblib、*.lfs.*、*.model、*.msgpack、*.onnx、*.ot、*.parquet、*.pb、*.pt、*.pth、*.rar、saved_model/**/*、*.tar.*、*.tflite、*.tgz、*.xz、*.zip、*.zstandard、*.tfevents*、*.db*、*.ark*、**/*ckpt*data*、**/*ckpt*.meta、**/*ckpt*.index、*.safetensors、*.ckpt、*.gguf*、*.ggml、*.llamafile*、*.pt2
-
基于GIT上传的时候,您需要提前扫描本地模型目录下所有大于5MB的文件,并通过手动标记
git lfs track <your_file_name>
; -
无论是 GIT 上传,还是 Python SDK 上传 ,当前均不支持断点续传。请确保上传过程中的设备通电、网络稳定,否则失败后需要重新上传。
给模型打版本#
为保证模型被正确使用,您需要给您的模型合适的版本,以免您在更新模型时影响使用模型的服务。