上传文件
向仓库上传文件必须使用访问令牌。
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参数,详见upload_folder。
创建提交
使用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:仅为兼容第三方组件,本身并无作用。
使用Git工具上传文件
使用Git命令行
在此不展开介绍如何使用Git工具进行仓库的版本管理,而是着重介绍使用git lfs上传大型文件(仍需小于5G)。
安装 git lfs(安装只需执行一次即可,无需在每个本地仓库都执行)。
bashgit lfs install在本地Git仓库中追踪大型文件(100MB以上)。根据实际需要,追踪相应文件,可以是某一类型,也可以是具体的文件名。示例如下:
bashgit lfs track "*.7z" "*.bin" "*.bz2" "*.ckpt" "*.h5" "*.lfs.*" "*.mlmodel" "*.model"\ "*.npy" "*.npz" "*.onnx" "*.pb" "*.pickle" "*.pkl" "*.pt" "*.pth" "*.rar" "*.safetensors"\ "saved_model/**/*" "*.tar.*" "*.tar" "*.tgz" "*.zip" "*tfevents*" "*.gz" git lfs track "big_file.bin"推送文件。
bashgit add . git commit -m 'commit message' git push
克隆私仓以及推送提交时,命令行会出现如下账号密码验证步骤,点此创建令牌,其中password为访问令牌,若仓库涉及lfs文件,则可能需要多次验证。
Username for 'https://modelers.cn': username
Password for 'https://username@modelers.cn':访问令牌