上传和下载文件
通过 PVC 使用集群存储非常方便,它可作为存储卷被挂载到 Notebook、Job、MLService 等各种工作负载的 Pod 中。例如在进行模型训练时,你可以把训练脚本以及训练数据存放到 PVC,然后挂载在 Job 的 Pod 中。
本教程将分场景介绍如何从集群外部上传文件到 PVC,以及如何从 PVC 下载文件到集群外部。
由于下面的部分方法需要使用到命令行工具,而 Notebook 提供了终端并且 Notebook 的镜像中预装了这些命令行工具,因此我们推荐把 PVC 挂载到一个 Notebook 上,然后在 Notebook 中进行操作。
本地文件系统
Notebook
把 PVC 挂载到 Notebook 上,本地文件系统和 PVC 之间的文件传输,可直接在 Notebook 的前端页面上操作:
File Browser
在 PVC 上启动 Explorer 之后,则可通过 File Browser :
云存储中转
也可通过其他云存储服务进行中转,即 本地 -> 云存储 -> 集群 PVC
:
- 本地与云存储之间的文件传输方法请参阅相应云存储的文档;
- 云存储与 PVC 之间的文件传输方法请参阅云存储服务。
云存储服务
要在云存储与 PVC 之间复制或同步文件,可以在 Notebook 的终端中使用命令行工具 rclone。这里以 Amazon S3 为例,首先参照 Amazon S3 Config 进行配置,完成后执行以下命令:
rclone copy <REMOTE>:<BUCKET>/path/to/the/file . # 从 S3 存储下载
rclone copy ./file <REMOTE>:<BUCKET>/path/to/the/ # 上传到 S3 存储
rclone sync <REMOTE>:<BUCKET>/path/to/the/dir . # 从 S3 存储同步
rclone sync . <REMOTE>:<BUCKET>/path/to/the/dir # 同步到 S3 存储
rclone 之外,还有其他方便的工具可供使用,例如 s3cmd、s5cmd 等。
HTTP/FTP 服务
要通过 HTTP(S)、(S)FTP 等协议从网络下载文件到 PVC,可以在 Notebook 的终端中使用 wget
或 curl
命令进行下载:
wget <URL>
curl -O <URL>
Git 仓库
可以在 Notebook 的终端中使用 git
命令,从 GitHub 等代码托管平台克隆或拉取项目,并在提交修改后推送回去:
git clone <repository>
git pull
git fetch
git push
Hugging Face Hub
Hugging Face Hub 是一个拥有超过 35 万个模型和 7.5 万个数据集的平台,所有这些模型和数据集都是开源并且公开可用的。从 Hugging Face Hub 下载一个模型或数据集有多种方法,下面以模型 mistralai/Mistral-7B-v0.1
为例进行演示,首先来到该模型的 Files and versions 标签页:
使用脚本
点击 Use in Transformers,按照提示进行操作,即在 Python 程序中调用 transformers
库加载模型。首次加载时,模型文件会被下载到缓存目录下,即 PVC 的 .cache/huggingface/hub/models--mistralai--Mistral-7B-v0.1/
路径下。
from transformers import pipeline
pipe = pipeline("text-generation", model="mistralai/Mistral-7B-v0.1")
# 或
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1")
使用 git
点击 Clone repository,按照提示进行操作,即使用 git
命令将模型的 Git 仓库直接克隆到 PVC 中:
# git lfs install # Notebook 的镜像中已经预装了 git-lfs,因此不必再执行
git clone https://huggingface.co/mistralai/Mistral-7B-v0.1
单个文件
如果只需要下载个别文件,例如只下载模型的 safetensors 文件,那么可以复制相应文件的下载链接,然后在终端中使用 wget
命令下载:
wget https://huggingface.co/mistralai/Mistral-7B-v0.1/resolve/main/model-00001-of-00002.safetensors?download=true
wget https://huggingface.co/mistralai/Mistral-7B-v0.1/resolve/main/model-00002-of-00002.safetensors?download=true
大规模数据
在处理大规模数据(如 100TB 级别)的导入和导出时,根据数据源的不同,我们采用不同的策略以确保数据传输的效率和安全性。以下是针对不同数据源的一些方法:
数据源为云存储时:
- 参照云存储服务操作。
数据源为 HDD/SDD 外置驱动器或类似设备时:
- 将驱动器连接到集群外的与集群网络连接速度较快的计算机上,然后参照本地文件系统继续操作。
- 或者,请求管理员操作,将驱动器连接到存储集群的节点上,直接使用存储系统的工具进行数据传输。这种方法的数据传输速度一般较快,但需要能够访问存储集群的工具和接口。