Skip to content

上传和下载文件

AICoder 是智算云平台上的一个云端辅助开发环境,提供免费的 CPU 实例,专为管理和辅助 AI 工作负载而设计。

AICoder 支持通过跳板机使用 scpsftprsync 在本地与云端实例间传输文件,帮助您管理数据集、代码等资源。本文的命令以本地计算机与一个 AICoder 之间的上传和下载为例。如果需要在两个可用区之间直接传输共享高性能存储数据,请参见跨可用区传输共享高性能存储数据

准备工作

  • 您已成功创建并启动 AICoder 实例。
  • 您已在平台登记 SSH 公钥,并通过 AICoder Shell 窗口中的一键重启界面操作重启目标 AICoder,使新公钥生效。详见 SSH 远程连接
  • 如果目标是共享高性能存储,您已在启动 AICoder 时选择与存储卷相同的可用区,并通过界面挂载目标存储卷。

重要

一键重启是 AICoder Shell 窗口中的界面操作,不是在终端中执行的 Shell 命令。登记 SSH 公钥后必须重启目标 AICoder;新公钥只有在重启完成并由平台注入后才会生效。

快捷获取文件传输命令

一键复制

登录智算云平台,打开 AICoder Shell,在右上角点击密钥按钮,在弹窗中获取 scp / rsync 等文件传输命令。

SCP 上传命令格式解析:

language-shell
scp -J <ssh-jumper> localfile root@<aicoder-id>:/remotefile

平台弹窗当前展示的 Rsync 上传命令基础格式如下:

language-shell
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 的实际值:

language-shell
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 启动界面配置存储卷。

确认挂载后,可以在共享存储中创建本次传输使用的子目录:

language-shell
ssh -J <ssh-jumper> <username>@<aicoder-id> 'mkdir -p /mnt/public/jane'

使用 scp 传输文件和文件夹

scp 适合连接稳定时快速传输单个文件或小型目录,但不提供可靠的断点续传。大文件、大量文件或不稳定网络应优先使用 rsync

上传文件

language-shell
scp -J ssh-jumper.neogpu.com localfile username@aicoder_id:/remotefile

示例:

language-shell
scp -J ssh-jumper.neogpu.com ~/Desktop/v2.jpg root@aic-c8lkg5b88mieqw6b:/mnt/public/jane/

下载文件

language-shell
scp -J ssh-jumper.neogpu.com username@aicoder_id:/remotefile localfile

示例:

language-shell
scp -J ssh-jumper.neogpu.com root@aic-c8lkg5b88mieqw6b:/mnt/public/jane/v2.jpg ~/Desktop/

传输文件夹(使用 -r 递归复制):

  • 上传:

    language-shell
    scp -r -J ssh-jumper.neogpu.com ~/Desktop/myfolder root@aic-c8lkg5b88mieqw6b:/mnt/public/jane/
  • 下载:

    language-shell
    scp -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 是兼容性最低要求,应优先使用操作系统软件源提供的当前维护版本。

先在发起传输的本地终端检查实际调用的程序和软件版本:

language-shell
command -v rsync
rsync --version

再通过目标 AICoder 的 SSH 连接检查远端版本:

language-shell
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 程序和当前命令路径:

language-shell
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 下,并启用传输进度展示和断点续传能力。

language-shell
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 中使用以下命令观察接收端资源:

language-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 重启或实例终止。长时间任务开始前,请查看非活跃状态限制

  1. 启动一个新的 tmux 会话:

    language-shell
    tmux
  2. tmux 会话中执行 scp/rsync 等耗时操作的命令。

  3. Ctrl+B 然后按 D 将会话分离。

  4. 要重新连接到 tmux 会话:

    language-shell
    tmux ls
    tmux attach-session -t <session-id>

    其中 <session-id> 需要替换为 tmux ls 命令列出的会话 ID。

关于 tmux 等后台运行工具的详细介绍,可参考教程

工具对比

选择合适的工具取决于具体需求:

特性scpsftprsync
适用场景快速单次文件/文件夹传输频繁文件操作/管理备份、同步,增量传输
命令结构简单直接稍复杂灵活,选项丰富
交互性非交互式交互式 shell非交互式,但可通过选项实现复杂操作
文件管理不提供提供,支持导航不提供文件管理,专注于同步
文件夹复制支持递归复制(-r 选项)支持内置支持递归,高效
文件传输适合连接稳定时的单个文件或小型目录适合小文件和交互式文件管理适合大文件、大量文件和增量传输,支持断点续传
文件操作支持部分文件传输命令(putgetmputmget支持更多同步选项,如删除、权限保持等
优点命令简单,适合一次性小规模传输交互式管理,部分文件命令,适合小文件/文件夹传输增量传输,效率高,功能强大,灵活
缺点不适用于交互式文件管理更多命令需学习,大文件传输效率或不如scp选项较多,学习曲线稍陡峭
效率小规模单次传输简单快速交互操作更方便,但原始传输速度可能较低增量传输大幅提高效率,尤其在同步场景下

提示

小型单次传输可用 scp,交互式文件管理选 sftp,大文件、大量文件或需要断点续传时使用 rsync