基于openMindhub上传、下载模型/项目/数据集

一、配置环境和准备token

准备token

昇思大模型平台网页: 右上角-->个人中心-->访问令牌-->刷新token,token用于上传文件和处理私有仓库文件

配置环境

python
import os
os.environ["OPENMIND_HUB_ENDPOINT"] = "https://xihe.mindspore.cn"

注意:该命令只能放在 from openmind_hub import om_hub_download之前运行。

二、下载文件

openMind Hub Client通过黑白名单的方式控制文件的下载路径,文件的绝对路径不能以黑名单中的路径开头(默认缓存路径~/.cache/openmind除外),且必须在白名单中。黑名单为["/etc", "/var", "/bin", "/boot", "/lib", "~/."],白名单在linux下默认为["/tmp", "~/"],windows下为["~/", "D:", "E:", "F:"]。如不满足用户需求,用户可以通过配置环境变量HUB_WHITE_LIST_PATHS(用逗号隔开每个路径)自行配置白名单,同时黑名单权限的优先级大于白名单权限。

下载单个文件

om_hub_download 方法可以从远程仓库下载文件,并将其缓存在本地,是最主要的下载文件的方法。示例如下:

python
from openmind_hub import om_hub_download

om_hub_download(
    repo_id="chenqi49/test1110701ff",
    repo_type="dataset",
    filename="asdasd",
    local_dir="~/test1110701ff",
)
  • repo_id:目标仓库,必选。
  • repo_type:仓库类型,包括“model”、“dataset”或“space”,默认为None。若为None时则代表“model”。
  • filename:需要下载的文件名称,必选。
  • local_dir:文件下载到本地的路径,可选,默认只在缓存中创建symlink文件。

om_hub_download会返回一个本地缓存的指针文件路径,请不要修改此文件以避免损坏缓存,详见缓存系统

下载整个仓库

snapshot_download 可以一次性下载整个仓库。示例如下:

python
from openmind_hub import snapshot_download

snapshot_download(repo_id="chenqi49/privatedata",
                  token = "xxxxxx",
                  local_dir="~/privatedata")
  • repo_id:目标仓库,必选。
  • repo_type:仓库类型,包括“model”、“dataset”或“space”,默认为None。若为None时则代表“model”。
  • local_dir:将文件下载到本地的路径,可选。

与上传目录类似,下载时也可以选择只下载某类文件或忽略下载某类文件,示例如下:

python
from openmind_hub import snapshot_download
snapshot_download(
    repo_id="chenqi49/privatedata",
    local_dir="~/privatedata",
    allow_patterns="*.md",
)
  • allow_patterns:只下载某类文件。如allow_patterns="*.md" 表示只下载.md
  • ignore_patterns:忽略下载某类文件。如ignore_patterns=["*.bin", "*.safetensors"]表示忽略下载.bin.safetensors文件。

三、上传文件

向仓库上传文件必须使用[访问令牌]。

昇思大模型平台网页: 右上角--> 个人中心--> 访问令牌--> 刷新token,token用于上传文件和处理私有仓库文件

openMind Hub Client通过黑白名单的方式控制要上传文件的路径,文件的绝对路径不能以黑名单中的路径开头(默认缓存路径~/.cache/openmind除外),且必须在白名单中。黑名单为["/etc", "/var", "/bin", "/boot", "/lib", "~/."],白名单在linux下默认为["/tmp", "~/"],windows下为["~/", "D:", "E:", "F:"]。如不满足用户需求,用户可以通过配置环境变量HUB_WHITE_LIST_PATHS(用逗号隔开每个路径)自行配置白名单,同时黑名单权限的优先级大于白名单权限。

注意: 由于模型文件的多样性,用户理论上可以上传任何格式的文件到服务端,模型大小从几MB到几百GB也都有可能,因此openMind Hub Client不限制用户上传的文件的类型和大小,请用户注意文件的敏感性,以免发生敏感信息被上传到服务端的事故。

上传单个文件

使用upload_file向仓库中上传单个文件。示例如下,查看API文档获取支持的详细参数列表:

py
from openmind_hub import upload_file

upload_file(
    token="xxx",
    path_or_fileobj="/path/to/local/space",
    repo_id="username/my-cool-space",
    path_in_repo="Myfile"
)
  • path_in_repo:文件上传到仓库中的路径。
  • token:对目标仓库具有可写权限的访问令牌,必选。
  • path_or_fileobj:要上传的本地文件的路径,必选。
  • repo_id:目标仓库,必选。

上传文件夹

使用upload_folder向仓库中上传文件夹。示例如下,查看API文档获取支持的详细参数列表:

py
from openmind_hub import upload_folder

upload_folder(
    token="xxx",
    folder_path="/path/to/local/space",
    repo_id="username/my-cool-space",
)
  • token:对目标仓库具有可写权限的访问令牌,必选。
  • folder_path:要上传的本地文件夹的路径,必选。
  • repo_id:目标仓库,必选。

若需对上传的文件类型进行过滤,可以使用allow_patternsignore_patterns参数

  • allow_patterns(List[str]str, 可选):只允许某类文件上传。如allow_patterns=["*.bin", "*.py"]表示只上传以.bin和.py结尾的文件。
  • ignore_patterns(List[str]str, 可选):忽略某类文件的上传。如ignore_patterns="*.log"表示忽略所有日志文件。

创建提交

使用create_commit手动创建CommitOperationAdd、CommitOperationDelete的操作列表,向仓库中创建提交。示例如下,查看API文档获取支持的详细参数列表:

创建提交,示例如下:

python
from openmind_hub import create_commit, CommitOperationAdd, CommitOperationDelete

operations = [
    CommitOperationAdd(path_in_repo="LICENSE.md", path_or_fileobj="~/repo/LICENSE.md"),
    CommitOperationDelete(path_in_repo="weights.h5"),
]
create_commit(
    repo_id="owner/repo",
    operations=operations,
    commit_message="create commit",
    token="xxx",
)
  • repo_id(str):目标仓库,格式为用户名/仓库名。用户名和仓库名均由字母、数字、点号(.)、下划线(_)或中划线(-)组成。
  • operations(Iterable[CommitOperation]):CommitOperationAdd和CommitOperationDelete类的列表。
  • commit_message(str): 本次上传的提交信息。
  • commit_description(str, 可选): 对本次提交的描述。
  • token(str, 可选): 对目标仓库具有可写权限的访问令牌,单独使用此方法时则为必选。
  • revision(str, 可选):要上传的指定分支,由字母、数字、下划线(_)或中划线(-)组成,默认为"main"。
  • num_threads(int, 可选):上传所使用的线程数目,默认为5。
  • kwargs:仅为兼容第三方组件,本身并无作用。

Q&A

关于下载大文件

Q: 下载大文件时中断,应该怎么办?

A:重新启动下载即可,openmindhub支持断点续下,再次下载会从上次断开的地方开始。

关于代码报错404

Q: 我使用下载时,指导了特定的repoid,该仓库存在,但是运行报错404,找不到该仓库。

A1: os.environ["OPENMIND_HUB_ENDPOINT"] = "https://xihe.mindspore.cn"命令必须放在 from openmind_hub import om_hub_download之前运行,否则该设置不生效。

A2: 可能你的仓库是space,但是你在代码里未指定参数repo_type='space',也会导致404报错。

关于token错误

Q: 下载私仓或者上传时报错:check restful token failed。

A:该错误表示你使用的token是错误的,可以去个人中心刷新token后拷贝正确的token。