国家超算中心K8s 容器服务,新版容器和老版本的一些坑
*超算中心 K8s 容器服务**的定位、用途、优势和适用场景:
https://www.scnet.cn/ui/console/index.html#/container-service/container-group 新版只支持武汉,只能开一张卡,但是免费
老版本支持大部分算力中心 ,支持4张16g卡,但是需要开通或者收费
https://www.scnet.cn/ui/console/index.html#/container-service/add-container-instance
一、核心是什么
超算中心基于 Kubernetes(K8s) 搭建的容器化计算集群,就是把传统超算节点、异构加速卡(你这里的DCU)、CPU/内存资源,打包成独立容器对外提供服务。
和普通云容器、本地Docker本质一致,但硬件是超算级算力(多核CPU、大内存、国产DCU加速卡)。
二、主要用途(超算用户最常用)
-
跑算力任务
模型训练、推理、数值计算、仿真、大数据处理、AI任务等。你当前的环境配有DCU异构加速卡,主打AI/深度学习、并行计算。 -
统一调度硬件资源
超算节点多、硬件杂(CPU/加速卡),K8s自动分配节点、管控资源配额(你看到的7核CPU/60G内存/16G DCU),避免多人抢资源、资源浪费。 -
环境一键复用&隔离
- 容器自带独立运行环境(Python、CUDA、驱动、依赖库),不用反复装机配环境;
- 不同用户/任务环境互相隔离,互不干扰。
-
临时交互式开发 + 后台批量任务
- 你现在
kubectl exec进容器,属于交互式终端:调试代码、测试环境、排错、试运行; - 也可以提交离线任务,让容器在后台长时间跑训练/计算,不用一直挂着终端。
- 你现在
三、和传统超算(Slurm)的区别
超算中心一般两套体系并存:
- 传统 Slurm:老牌超算调度,偏向大规模并行计算、HPC仿真、MPI集群,适合超长时间、多节点集群任务。
- K8s 容器服务:偏向轻量化、环境标准化、AI/云原生任务,上手更简单,环境迁移方便,主打单节点+加速卡场景(你现在就是单DCU节点)。
四、结合你当前环境的使用场景
从你的信息来看,这个环境定位很明确:
- 单节点、大内存(60G)+ 国产DCU加速卡 → 主要用于 AI模型训练、推理、深度学习实验
/root/private_data是持久化存储:代码、数据集、模型权重放这里,重启容器不丢失;系统盘/workspace临时用。- 支持交互式登录,适合代码调试、实验验证,也可提交容器任务跑正式作业。
五、总结一句话
超算K8s容器 = 超算硬件 + 容器化环境 + K8s资源调度,给你提供开箱即用、环境隔离、带高端CPU/加速卡的计算沙箱,主要用来跑AI、大数据、高性能计算类任务。
老版本有挂载点
一句话:挂载点就是把“超算平台的持久化存储/共享目录”映射到你容器里的某个路径,让容器里读写这个路径,实际上是在操作平台上的永久存储,删容器数据不丢。
一、通俗理解(类比)
- 容器本身像一个临时虚拟机:里面的
/workspace、/系统盘都是临时的,删容器/重建就没了。 - 挂载 = 给容器插了一块“永久硬盘”:
- 外部存储(超算平台):你的个人存储、项目共享盘、高速缓存盘。
- 容器内挂载点(mountPath):容器里的一个目录,比如
/root/private_data、/work/home/你的账号。
- 你在容器里
cd /root/private_data,其实就是直接读写超算平台上你的个人存储,容器没了文件还在。
二、超算互联网(scnet.cn)里的挂载点
你截图页面是“添加容器实例”的挂载配置区,常见三类:
1)个人持久化存储(必用)
- 外部存储:平台给你分配的个人数据盘(独立于容器)。
- 默认挂载点:
/root/private_data(或/work/home/scneeghb00)。 - 作用:代码、数据集、模型权重放这里,重启/删容器都不丢。
2)项目共享存储(组队用)
- 外部存储:团队共享盘(同一项目成员都能读写)。
- 挂载点:如
/groups/项目名/share。 - 作用:多人协作,共享数据集、代码、结果。
3)高速缓存盘(跑任务用)
- 外部存储:超算集群的高速本地盘(速度快、临时)。
- 挂载点:如
/sfs、/cache。 - 作用:放训练中间文件、临时数据,速度比个人盘快,但容器删了可能清空。
三、关键概念(页面上的字段)
- 挂载点(容器内路径):容器里的目录,比如
/root/private_data,必须是容器内不存在或空的目录。 - 存储来源:选“个人存储”“项目存储”“高速缓存”等。
- 只读/读写:默认读写;如果是公共数据集,可设只读防误删。
四、为什么一定要用挂载点?
- 数据不丢:容器是临时环境,只有挂载目录的数据才持久化。
- 数据互通:多个容器、多个任务可以挂载同一个存储,共享数据。
- 速度更快:高速缓存盘比系统盘快,跑大模型训练必须用。
五、你当前环境的对应关系
你登录后看到:
/root/private_data 等价 /work/home/scneeghb00 → 个人持久化挂载点
这就是平台默认帮你挂载好的个人存储,不用自己配;新建容器时也可以手动添加更多挂载(比如项目盘、高速盘)。
老版本容器 ssh 模式,容易连不上 失败
国家超算中心 老版本 容器 提示 前实例已停止服务,可能的原因包括:实例被停用、关机或删除,您可以 返回 查看具体原因。若实例未删除,可重新启用/开机后刷新本页面,若实例被删除,请重新创建实例后使用SSH进入。 ,昆山节点
重启也没有用。而且我只用了一个dcu
这里有一个问题,部署一下 需要5-10分钟以上不像notebooke那样非常快

jupyterlab## 标题 模式 可以进入服务器,

jupyterlab 模式找不到节点的共享文件夹,不同于notebook,(全部加载)
你现在在老版本容器(worker-0)里看不到 /public/SothisAI/sharingCenter/other/、/public/home,是因为老容器平台默认没把 /public 整个挂载进容器,只挂了一部分,或者根本没挂。
你看到的目录:
bin dev home lib lib64 media opt public run srv tmp var workspace
boot etc jupyter-ext lib32 libx32 mnt proc root sbin sys usr work 容器juberlab
1. 哪个是共享目录?
- /public:容器里确实有这个目录,但里面是空的或者只挂了少量子目录,不是超算集群那个完整的 /public。
- /work、/workspace:一般是容器本地临时盘(不是集群共享存储)。
- /public/SothisAI/sharingCenter/other//acz6ty4okx、/public/home/acz6ty4okx:这两个是集群级共享路径,老容器默认不挂载,所以你在容器里 cd 进去会提示不存在。
2. 为什么找不到?(昆山老平台通病)
- 老容器(jupyterlab/网页容器)不是全量挂载 /public,只做了最小化挂载,没把 share、home 挂进来。
- 你看到的 /public 是容器内部的空目录或局部挂载点,和集群 login 节点的 /public 不是同一个。
3. 怎么在容器里访问到你的共享目录?
- 容器里的 /public ≠ 集群 /public,所以找不到你的 share/home;
- 最快解决:重建容器,勾选“挂载集群 /public”;
- https://www.scnet.cn/ui/console/index.html#/space/shell
- 临时用:先登 login 节点,直接在 login 里操作 /public/SothisAI/sharingCenter/other/acz6ty4okx。
cp -rf 把 cp -rf 文件夹/ /public/home/$USER
为什么要保存镜像
在 SCNet(国家超算互联网)平台上,保存镜像 是一个非常重要的功能,主要原因如下:
核心原因:持久化您的环境配置
1. 容器是临时的,镜像是持久的
- 容器实例(Container Instance)运行时的修改(安装的软件、配置的环境变量、下载的数据等)默认只保存在容器内部
- 一旦容器停止、删除或重启,这些修改会全部丢失
- 保存镜像 = 把当前容器的完整状态"拍快照"固化下来,以后可以基于这个镜像重新创建一模一样的环境
2. 避免重复配置环境
假设您在容器里:
- 安装了 PyTorch、TensorFlow、JAX 等深度学习框架
- 配置了 CUDA、cuDNN、NCCL 等 GPU 依赖
- 安装了各种 Python 包、系统工具、编译器
- 设置了环境变量、SSH 密钥、Git 配置
不保存镜像:下次开新容器 → 从零开始重新安装一遍(耗时几十分钟到几小时)
保存镜像:下次直接基于保存的镜像启动 → 环境 instantly ready
3. 跨节点/跨任务复用
- 超算平台通常有多个计算节点,任务结束后容器会被回收
- 保存镜像后,可以在任何节点、任何时间快速拉起相同环境
- 方便批量提交多个相同配置的任务
4. 版本管理与回滚
- 可以保存多个版本的镜像(如
v1-base、v2-with-pytorch、v3-finetuned) - 如果新环境搞坏了,可以回退到之前的镜像版本
5. 团队协作
- 将镜像共享给团队其他成员,确保大家使用完全一致的运行环境
- 避免"在我机器上能跑"的问题
典型使用场景
| 场景 | 操作建议 |
|---|---|
| 刚配置好深度学习环境 | 立即保存镜像 |
| 安装了新的软件包/库 | 保存镜像 并打标签 |
| 任务运行前 | 确认基于正确的已保存镜像启动 |
| 长期项目 | 定期保存镜像,做好版本管理 |
在 SCNet 上的具体操作
在控制台 容器服务 → 容器实例 页面,通常会有:
- “保存镜像” 或 “制作镜像” 按钮
- 可以自定义镜像名称和标签(如
my-env:v1) - 保存后可在 “镜像仓库” 中查看和管理
总结
保存镜像 = 给您的劳动成果上保险
容器实例随时可能被清理,只有保存为镜像后,您的环境配置才能真正"留下来"供后续反复使用。这是超算/云计算平台上最基础也最重要的操作习惯之一。
/public/home/$USER 目录 不会变把。生成的文件,不需要保存镜像吧
您说得对,但需要区分清楚:
持久化存储 vs 容器镜像
持久化存储(如 /public/home/$USER) |
容器镜像 | |
|---|---|---|
| 保存内容 | 您的代码、数据、模型文件、脚本等 | 系统环境、安装的软件、配置、依赖库 |
| 生命周期 | 永久保留,与容器无关 | 需要主动保存,否则容器删除后丢失 |
| 类比 | 就像您的 U 盘/硬盘,文件一直在 | 就像电脑的系统盘,重装后环境没了 |
您的理解基本正确
/public/home/$USER # ✅ 持久化存储,文件不会丢
/public/share/xxx # ✅ 共享存储,文件不会丢
这些目录里的文件确实不需要"保存镜像"来保留,因为它们是挂载到容器外部的独立存储,与容器的生命周期无关。
那什么需要保存镜像?
容器内部的非挂载目录,例如:
# 这些路径在容器内部,容器删除后全部消失
/usr/local/lib/python3.x/dist-packages/ # pip 安装的包
/usr/local/bin/ # 安装的工具
/etc/ # 系统配置
/root/ # root 用户的家目录(非挂载)
/opt/ # 额外安装的软件
实际场景判断
场景 1:您只在 /public/home/$USER 里写代码和存数据
- 使用平台预置的基础镜像(如 PyTorch 镜像)
- 代码和数据都存在家目录
- 不需要保存镜像 ✅
场景 2:您在容器里 pip install 了新包,或 apt install 了系统工具
- 新包安装在
/usr/local/lib/...(容器内部) - 容器删除后,这些包就没了
- 需要保存镜像 ⚠️,否则下次开新容器要重新安装
场景 3:您修改了系统配置文件(如 ~/.bashrc、/etc/hosts)
- 这些修改在容器内部
- 需要保存镜像 ⚠️
最佳实践建议
| 操作 | 存放位置 | 是否需要保存镜像 |
|---|---|---|
| 代码、脚本、Notebook | /public/home/$USER |
❌ 不需要 |
| 数据集、模型权重 | /public/home/$USER 或 /public/share/ |
❌ 不需要 |
pip install xxx |
容器内部 /usr/local/... |
✅ 需要 |
apt-get install xxx |
容器内部 /usr/bin/... |
✅ 需要 |
| 修改环境变量、配置文件 | 容器内部 /etc/、/root/ |
✅ 需要 |
一个实用技巧
如果您经常需要安装额外包,可以:
# 1. 在家目录创建 requirements.txt,记录依赖
cat > /public/home/$USER/requirements.txt << 'EOF'
torch==2.3.0
transformers
datasets
EOF
# 2. 每次启动容器后一键安装(比保存镜像更轻量)
pip install -r /public/home/$USER/requirements.txt
这样即使不保存镜像,也能快速恢复环境。
总结
/public/home/$USER里的文件是安全的,不需要保存镜像。只有容器内部的系统环境和软件安装,才需要保存镜像来持久化。
显卡查看 异构加速卡1 是第一代显卡 只支持rocm-smi
`
# 查看是否有 DCU 设备
ls /dev/dcu* 2>/dev/null || echo "No DCU devices found"
# 或者查看 PCI 设备
lspci | grep -i 'VGA\|3D\|Display' | head -10
No DCU devices found
04:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Vega 20 [Radeon Pro VII/Radeon Instinct MI50 32GB] (rev 04)
23:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 41)
26:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Vega 20 [Radeon Pro VII/Radeon Instinct MI50 32GB] (rev 04)
43:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Vega 20 [Radeon Pro VII/Radeon Instinct MI50 32GB] (rev 04)
63:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Vega 20 [Radeon Pro VII/Radeon Instinct MI50 32GB] (rev 04)
root@worker-0:/public/home/a15657581978/merged_correct# # 查看 ROCm GPU 监控(最常用)
rocm-smi
# 查看详细信息
rocm-smi --showmeminfo vram
rocm-smi --showpidgpus
# 查看 ROCm 环境信息
rocminfo | head -30
============================ System Management Interface =============================
======================================================================================
HCU Temp AvgPwr Perf PwrCap VRAM% HCU% Mode
0 49.0C 25.0W auto 300.0W 0% 0% N/A
1 49.0C 23.0W auto 300.0W 0% 0% N/A
2 49.0C 30.0W auto 300.0W 0% 0% N/A
3 51.0C 22.0W auto 300.0W 0% 0% N/A
======================================================================================
=================================== End of SMI Log ===================================
============================ System Management Interface =============================
======================================================================================
HCU[0] : vram Total Memory (MiB): 16368
HCU[0] : vram Total Used Memory (MiB): 10
HCU[1] : vram Total Memory (MiB): 16368
HCU[1] : vram Total Used Memory (MiB): 10
HCU[2] : vram Total Memory (MiB): 16368
HCU[2] : vram Total Used Memory (MiB): 10
HCU[3] : vram Total Memory (MiB): 16368
HCU[3] : vram Total Used Memory (MiB): 10
======================================================================================
=================================== End of SMI Log ===================================
Error: Invlaid arguments: --showpidgpus
amdgpu module is loaded
=====================
HSA System Attributes
=====================
Runtime Version: 1.1
System Timestamp Freq.: 1000.000000MHz
Sig. Max Wait Duration: 18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
Machine Model: LARGE
System Endianness: LITTLE
Mwaitx: DISABLED
DMAbuf Support: NO
==========
HSA Agents
==========
*******
Agent 1
*******
Name: Hygon C86 7185 32-core Processor
Uuid: CPU-XX
Marketing Name: Hygon C86 7185 32-core Processor
Vendor Name: HygonGenuine
Feature: None specified
Profile: FULL_PROFILE
Float Round Mode: NEAR
Max Queue Number: 0(0x0)
Queue Min Size: 0(0x0)
Queue Max Size: 0(0x0)
Queue Type: MULTI
Node: 0
`
实际硬件情况
现在真相大白了!从 rocm-smi 和 rocminfo 的输出可以确认:
| 项目 | 实际值 |
|---|---|
| GPU 型号 | AMD MI50 32GB 物理卡 |
| 实际可用显存 | 16GB(16368 MiB) |
| 数量 | 4 块 |
| CPU | 海光 C86 7185 32核处理器 |
| 平台类型 | 海光 DCU 兼容卡(基于 AMD MI50 定制,显存砍半) |
关键发现
HCU[0] : vram Total Memory (MiB): 16368 ← 16GB,不是 32GB
虽然 lspci 显示的是 AMD MI50 32GB(物理硬件),但 rocm-smi 显示实际可用显存是 16GB。
这说明: - 或者这是海光定制的 DCU 版本(基于 MI50 核心,但显存配置为 16GB) 基于 AMD MI50 的定制卡
控制台信息是对的
| 控制台显示 | 实际对应 |
|---|---|
| 异构加速卡 1/16GB | ✅ 正确,实际可用就是 1 张卡 16GB |
| CPU: 8核 | 实际海光 32核,但容器限制给您 8核 |
| 内存: 27GB | 容器内存限制 |
所以您的环境是
海光 CPU (C86 7185) + 海光 DCU (基于 AMD MI50 16GB)
不是纯 AMD 平台,是海光 DCU 平台!
正确的 GPU 监控命令
# 海光 DCU 使用 rocm-smi( hy-smi命令hy-smi 通常支持 海光自研 DCU 芯片,因为底层是 AMD ROCm 兼容)
rocm-smi
# 查看显存
rocm-smi --showmeminfo vram
# 查看进程占用
rocm-smi --showpid
# 查看详细信息
rocm-smi -a
运行 AI 训练时的注意事项
# 1. 确认 PyTorch/TensorFlow 是否识别到 DCU
python3 -c "
import torch
print('PyTorch:', torch.__version__)
print('ROCm available:', torch.cuda.is_available())
print('Device count:', torch.cuda.device_count())
for i in range(torch.cuda.device_count()):
print(f' Device {i}: {torch.cuda.get_device_name(i)}')
print(f' Memory: {torch.cuda.get_device_properties(i).total_memory / 1024**3:.1f} GB')
"
# 2. 训练时限制显存使用(单卡 16GB,注意 batch size)
# 例如 LLaMA 7B 推理需要约 14GB,14B 可能需要多卡或量化
总结
| 问题 | 答案 |
|---|---|
为什么 hy-smi 找不到? |
海光 DCU 底层用 AMD ROCm,rocm-smi 可用 |
为什么 lspci 显示 32GB 但可用 16GB? |
物理卡 32GB,但平台/固件限制为 16GB |
| 控制台信息是否准确? | 显存 16GB 是准确的,CPU 和内存是容器配额 |
hy-smi 的典型支持范围
hy-smi 通常支持搭载海光原生 DTK 驱动的自研 DCU 芯片,例如:
| 海光 DCU 型号 | 是否支持 hy-smi | 备注 |
|---|---|---|
| 海光 DCU Z100+ / K100 | ✅ 支持 | 搭配海光 DTK 驱动使用 |
| 海光深算系列 (Z100-L等) | ✅ 支持 | 搭配海光 DTK 驱动使用 |
| 基于 AMD MI50 的定制卡 | ❌ 不支持 | 通常搭配 AMD ROCm 官方驱动 |
| 为什么您的环境不用 hy-smi? | ||
| 您的卡虽然 CPU 是海光,但 GPU 部分本质上是 AMD MI50 的定制版本,平台部署了 AMD ROCm 官方驱动 而非海光原生 DTK 驱动。原因通常有以下三点: |
- 驱动选择:平台为了兼容性和稳定性,选择了 ROCm 官方驱动。SMI 工具是跟驱动走的,装了 ROCm 驱动就对应 rocm-smi。
- 软件生态:ROCm 生态更成熟,对 PyTorch/TensorFlow 等主流框架的适配更开箱即用,无需等待海光 DTK 的版本更新。
- 硬件代际:较早批次的 MI50 定制卡,海光当时可能还未提供完整的原生 DTK 驱动支持。
您的监控方案
既然rocm-smi可用,直接用即可,基本监控功能与hy-smi完全对等:
# 基本监控(替代 hy-smi,查看整体状态)
rocm-smi
# 查看温度/功耗/利用率等所有详细信息(等同 nvidia-smi)
rocm-smi -a
# 仅查看显存详情(已用/可用/总量)
rocm-smi --showmeminfo vram
# 持续监控(每秒刷新显存状态,类似 watch -n 1)
rocm-smi --showmeminfo vram -d 1
💡 进阶提示:
- 查找占卡进程:如果您发现显存被占用但不知道是谁占的,可以使用
rocm-smi --showpids查看占用 GPU 的进程 PID。 - 切勿混装:您的环境既然已经基于 ROCm 驱动,请勿尝试强行安装 hy-smi 或海光 DTK 驱动,这极易导致内核驱动冲突,造成系统死机或设备不可用。
更多推荐




所有评论(0)