上传和下载文件
AICoder 是智算云平台上的一个云端辅助开发环境,提供免费的 CPU 实例,专为管理和辅助 AI 工作负载而设计。
AICoder 支持通过跳板机使用 scp、sftp 和 rsync 在本地与云端实例间传输文件,帮助您管理数据集、代码等资源。本文的命令以本地计算机与一个 AICoder 之间的上传和下载为例。如果需要在两个可用区之间直接传输共享高性能存储数据,请参见跨可用区传输共享高性能存储数据。
准备工作
- 您已成功创建并启动 AICoder 实例。
- 您已在平台登记 SSH 公钥,并通过 AICoder Shell 窗口中的一键重启界面操作重启目标 AICoder,使新公钥生效。详见 SSH 远程连接。
- 如果目标是共享高性能存储,您已在启动 AICoder 时选择与存储卷相同的可用区,并通过界面挂载目标存储卷。
重要
一键重启是 AICoder Shell 窗口中的界面操作,不是在终端中执行的 Shell 命令。登记 SSH 公钥后必须重启目标 AICoder;新公钥只有在重启完成并由平台注入后才会生效。
快捷获取文件传输命令
一键复制
登录智算云平台,打开 AICoder Shell,在右上角点击密钥按钮,在弹窗中获取 scp / rsync 等文件传输命令。
SCP 上传命令格式解析:
scp -J <ssh-jumper> localfile root@<aicoder-id>:/remotefile平台弹窗当前展示的 Rsync 上传命令基础格式如下:
rsync -av -P --partial-dir=.rsync-part -e "ssh -J <ssh-jumper>" localfile root@<aicoder-id>:/remotefile该基础命令适合快速开始小型传输。大文件、大量文件或长时间传输时,请保留弹窗中的连接信息,并改用低内存 rsync 命令。
<ssh-jumper>为跳板机地址。请注意替换为平台提供的跳板机地址,需以弹窗中展示的地址为准。root为默认用户名(旧版实例可能使用其他用户名,请按照 SSH 远程连接中的界面步骤重启实例)。<aicoder-id>为 AICoder 实例 ID(如aic-c8lkg5b88mieqw6b)。
注意
- 小型单次传输可直接复制弹窗中的命令并修改源、目标路径。大文件、大量文件或需要断点续传时,请改用本页后续的低内存
rsync命令。 - 关于上传路径的选择(系统盘 vs 扩充存储),请参考 AICoder 存储空间。
- AICoder 实例 ID 在重置或重启后保持不变,但如果更换可用区,则 AICoder 实例不同。需要在可用区之间迁移共享存储数据时,使用两个 AICoder 直接传输,不要复用源可用区的 AICoder ID。
- 新手提示:本页的本地上传和下载示例需在本地计算机运行,而非目标 AICoder 上。AICoder 到 AICoder 的传输则需在源端 AICoder 上运行。
手动拼接命令
您也可以自行拼接命令,以下是拼接命令需要的关键字段。
<ssh-jumper>为跳板机地址。请注意替换为平台提供的跳板机地址,需以弹窗中展示的地址为准。root为默认用户名(旧版实例可能使用其他用户名,请按照 SSH 远程连接中的界面步骤重启实例)。<aicoder-id>为 AICoder 实例 ID(如aic-c8lkg5b88mieqw6b)。
确认共享存储目标路径
/mnt/public 只是共享存储挂载路径示例。平台不会因为目录名称相同而自动挂载共享存储;如果把数据写入未挂载的同名目录,实际会占用 AICoder 的 10 GiB 系统盘。
开始传输前,在本地计算机运行以下 SSH 检查。请将连接信息和路径替换为目标 AICoder 的实际值:
ssh -J <ssh-jumper> <username>@<aicoder-id> \
'findmnt -T /mnt/public && df -h /mnt/public && test -w /mnt/public && echo shared-storage-ready'只有显示 shared-storage-ready,并且 findmnt 显示 /mnt/public 位于共享存储文件系统而不是 / 或 OverlayFS 时,才能继续向该路径传输。df 在部分可用区不能反映存储卷配额,因此还需在控制台确认剩余配额。不要通过 mkdir -p /mnt/public 创建挂载点;请返回 AICoder 启动界面配置存储卷。
确认挂载后,可以在共享存储中创建本次传输使用的子目录:
ssh -J <ssh-jumper> <username>@<aicoder-id> 'mkdir -p /mnt/public/jane'使用 scp 传输文件和文件夹
scp 适合连接稳定时快速传输单个文件或小型目录,但不提供可靠的断点续传。大文件、大量文件或不稳定网络应优先使用 rsync。
上传文件:
scp -J ssh-jumper.neogpu.com localfile username@aicoder_id:/remotefile示例:
scp -J ssh-jumper.neogpu.com ~/Desktop/v2.jpg root@aic-c8lkg5b88mieqw6b:/mnt/public/jane/下载文件:
scp -J ssh-jumper.neogpu.com username@aicoder_id:/remotefile localfile示例:
scp -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b:/mnt/public/jane/v2.jpg ~/Desktop/传输文件夹(使用 -r 递归复制):
上传:
language-shellscp -r -J ssh-jumper.neogpu.com ~/Desktop/myfolder root@aic-c8lkg5b88mieqw6b:/mnt/public/jane/下载:
language-shellscp -r -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b:/mnt/public/jane/myfolder ~/Desktop/
注意
-r 选项会覆盖目标位置的同名文件,请谨慎使用。
传输大文件
在传输大文件时,可以使用以下方法确保传输过程不会因网络中断或退出 shell 而中断。
注意
在租户在多个可用区均有资源池的情况下,一个用户可能有多个 AICoder 实例。在传输大文件前,请确保使用正确的 aicoder_id,避免误传。如果目标是跨可用区的共享高性能存储,请使用跨可用区传输任务中的目标端连接信息和低内存 rsync 配置。
使用 rsync 传输大文件
在向智算云平台传输数据时,scp / sftp 是常用的命令行工具。但是如果对断点续传有比较高的要求,rsync 可能是更好的选择。
- 一个典型场景是文件夹包含大量小文件和几个大文件,并且网络带宽有限,那么
rsync的增量传输和断点续传功能能够有效地减少带宽使用和传输时间。 - AICoder 中已内置 rsync,但仍需确认实际调用的版本满足下方要求。
- AICoder 弹窗提供可一键复制的
rsync上传命令和连接信息。 rsync会分块传输文件,单个文件可以大于客户端内存。包含大量文件时,内存压力主要来自文件条目数量和并发传输进程数,而不是文件总字节数。
检查 rsync 版本和命令路径
以下低内存命令使用 --inc-recursive 和 --info=progress2。--inc-recursive 只有在两端均为 rsync 3.0.0 或更高版本时才能使用增量递归算法,--info=progress2 要求发起传输的一端为 rsync 3.1.0 或更高版本。为获得一致行为,本文要求本地计算机和目标 AICoder 都使用 rsync 3.1.0 或更高版本;两端版本号不必完全相同。3.1.0 是兼容性最低要求,应优先使用操作系统软件源提供的当前维护版本。
先在发起传输的本地终端检查实际调用的程序和软件版本:
command -v rsync
rsync --version再通过目标 AICoder 的 SSH 连接检查远端版本:
ssh -J <ssh-jumper> <username>@<aicoder-id> \
'command -v rsync && rsync --version'查看完整版本输出中的 rsync 软件版本,不要只根据 protocol version 判断兼容性。
重要
部分 macOS 版本在 /usr/bin/rsync 提供的程序仅与旧版 rsync 2.6.x 兼容,不支持本文的低内存选项。通过 Homebrew 安装新版后,当前 Shell 也可能仍然调用系统程序。请检查 Homebrew 程序和当前命令路径:
brew install rsync
"$(brew --prefix)/bin/rsync" --version
command -v rsync
rsync --version如果 command -v rsync 仍显示 /usr/bin/rsync,请按照 Homebrew 提示调整 PATH,或在传输命令中把开头的 rsync 替换为 "$(brew --prefix)/bin/rsync"。
了解 macOS 与 Linux 的差异
本文的命令使用 bash 和 zsh 均支持的 POSIX 风格引号与换行语法。从 macOS zsh 向 Linux AICoder 传输时,不需要仅因为 Shell 不同而改写命令;rsync 按字节传输文件,也不会转换文件内容或换行符。需要注意的是程序路径、文件路径和文件系统语义:
- 路径包含空格、方括号或通配符时,应引用完整参数。尤其不要在 zsh 中使用未引用且无法匹配的通配符,因为 zsh 和 bash 对此类表达式的默认处理不同。
-a会请求保留权限、时间、符号链接、所有者和组,但最终结果取决于两端账户和权限。如果不需要保留本地 macOS 的所有者和组,可在-a后添加--no-owner --no-group,并在小范围传输后确认目标工作负载可以读取文件。-a不包含 ACL 和扩展属性。只有业务确实依赖这些元数据且两端文件系统均支持时,才添加-A或-X并先做小范围验证。- macOS 文件系统通常不区分文件名大小写,并可能使用与 Linux 不同的 Unicode 文件名规范化方式。迁移包含仅大小写或规范化形式不同的文件名时,应先用代表性目录验证结果。
-a保留符号链接本身,不会把链接目标复制为普通文件。指向/Users/...等 macOS 绝对路径的链接在 Linux 中通常不可用。
使用低内存 rsync 命令
完整的 rsync 命令示例如下。该命令会将本地 /path/to/local/directory 中的内容传输到 AICoder 的 /mnt/public 下,并启用传输进度展示和断点续传能力。
rsync -a \
--inc-recursive \
--partial \
--partial-dir=.rsync-partial \
--info=progress2 \
--human-readable \
-e "ssh -T -o Compression=no -o ServerAliveInterval=30 -o ServerAliveCountMax=6 -J <ssh-jumper>" \
/path/to/local/directory/ \
root@<aicoder-id>:/mnt/public/-a递归传输并保留常用文件属性。--inc-recursive逐步构建目录清单,降低大型目录树的文件清单内存压力。--partial和--partial-dir在共享存储中保留未完成文件;传输中断后可重新运行相同命令。--info=progress2显示总体进度,避免-vP为大量小文件生成过多逐文件输出。- SSH 保活选项用于识别长时间无响应的连接。
Compression=no避免 SSH 对模型、压缩包和图片等通常已压缩的数据重复压缩。源数据以可压缩文本为主且带宽成为瓶颈时,可先在小范围测试-z。<ssh-jumper>为 SSH 跳板机地址。请务必替换为 AICoder Shell 中展示的真实跳板机地址。/path/to/local/directory/为本地目录路径。末尾的/表示复制目录中的内容。<aicoder-id>为 AICoder ID,例如aic-c7vyfhj5usmnsows。/mnt/public为共享高性能存储目录示例,需替换为「高性能存储」的存储卷在 AICoder 内的实际挂载路径或子路径(用户启动 AICoder 时应选择高性能存储卷,并为存储卷指定挂载路径)。
为避免 AICoder 内存不足并保持有效吞吐,请先只运行一个 rsync 进程。包含数百万个文件时,按一级子目录分批串行传输;不要通过增加并发来加速。默认不要添加 -H,首次传输也不要添加 --checksum。可以在 AICoder Shell 中使用以下命令观察接收端资源:
free -h
ps -eo pid,rss,cmd --sort=-rss | head如果命令显示 Killed 或退出码 137,请停止增加并发,减少下载或传输进程数,并按子目录拆分任务。
使用 tmux 实现后台传输
tmux 是个强大的终端复用器,可以保持会话在后台运行,即使连接断开也不会中断传输任务。请在发起传输的客户端上运行 tmux:本地到 AICoder 的传输应在本地 Linux、macOS 或 WSL 中运行;AICoder 到 AICoder 的传输应在源端 AICoder 中运行。
tmux 只能防止终端连接断开导致前台命令退出,不能防止 AICoder 重启或实例终止。长时间任务开始前,请查看非活跃状态限制。
启动一个新的
tmux会话:language-shelltmux在
tmux会话中执行scp/rsync等耗时操作的命令。按
Ctrl+B然后按D将会话分离。要重新连接到
tmux会话:language-shelltmux ls tmux attach-session -t <session-id>其中
<session-id>需要替换为tmux ls命令列出的会话 ID。
工具对比
选择合适的工具取决于具体需求:
| 特性 | scp | sftp | rsync |
|---|---|---|---|
| 适用场景 | 快速单次文件/文件夹传输 | 频繁文件操作/管理 | 备份、同步,增量传输 |
| 命令结构 | 简单直接 | 稍复杂 | 灵活,选项丰富 |
| 交互性 | 非交互式 | 交互式 shell | 非交互式,但可通过选项实现复杂操作 |
| 文件管理 | 不提供 | 提供,支持导航 | 不提供文件管理,专注于同步 |
| 文件夹复制 | 支持递归复制(-r 选项) | 支持 | 内置支持递归,高效 |
| 文件传输 | 适合连接稳定时的单个文件或小型目录 | 适合小文件和交互式文件管理 | 适合大文件、大量文件和增量传输,支持断点续传 |
| 文件操作 | 无 | 支持部分文件传输命令(put、get、mput、mget) | 支持更多同步选项,如删除、权限保持等 |
| 优点 | 命令简单,适合一次性小规模传输 | 交互式管理,部分文件命令,适合小文件/文件夹传输 | 增量传输,效率高,功能强大,灵活 |
| 缺点 | 不适用于交互式文件管理 | 更多命令需学习,大文件传输效率或不如scp | 选项较多,学习曲线稍陡峭 |
| 效率 | 小规模单次传输简单快速 | 交互操作更方便,但原始传输速度可能较低 | 增量传输大幅提高效率,尤其在同步场景下 |
提示
小型单次传输可用 scp,交互式文件管理选 sftp,大文件、大量文件或需要断点续传时使用 rsync。