基于openMindhub上传、下载模型/项目/数据集
一、配置环境和准备token
准备token
昇思大模型平台网页: 右上角-->个人中心-->访问令牌-->刷新token,token用于上传文件和处理私有仓库文件
配置环境
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 方法可以从远程仓库下载文件,并将其缓存在本地,是最主要的下载文件的方法。示例如下:
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 可以一次性下载整个仓库。示例如下:
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:将文件下载到本地的路径,可选。
与上传目录类似,下载时也可以选择只下载某类文件或忽略下载某类文件,示例如下:
from openmind_hub import snapshot_download
snapshot_download(
repo_id="chenqi49/privatedata",
local_dir="~/privatedata",
allow_patterns="*.md",
)
allow_patterns:只下载某类文件。如allow_patterns="*.md"表示只下载.mdignore_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文档获取支持的详细参数列表:
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文档获取支持的详细参数列表:
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_patterns和ignore_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文档获取支持的详细参数列表:
创建提交,示例如下:
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。
