联泰集群 AI 模型算法研发与加速平台 LtAI——用户使用手册
联泰集群AI模型算法研发与加速平台
LtAI
用户使用手册
联泰集群(北京)科技有限责任公司
2025年12月
目录
4.2. 为什么我创建的磁盘在容器实例里是只读的,写入不了数据?
4.4. miniconda3这个容器实例的路径下的文件是临时的吗?
1. 概述
本文为联泰集群AI模型算法研发与加速平台(简称LtAI)的用户使用手册,对平台主要功能的使用方法进行说明。
LtAI的核心功能是对算力集群进行统一的调度与管理,将集群中的计算资源(主要指对GPU、CPU、内存的占用)、网络资源(主要指计算网络如IB、RoCE带宽)和存储资源(指分布式存储中的存储空间)合理分配给团队和用户,同时为用户提供访问这些算力资源的界面,使得用户可以进行各种算力应用(例如算法开发、模型训练、模型推理服务部署、应用部署等)。
本文的读者对象为LtAI平台的用户,并假设用户已具备容器和容器镜像的基础知识。
2. 相关术语说明
文中涉及一些常用的术语或缩略语,在下表进行说明。
表 1 术语或缩略语说明
| 术语/缩略语 | 概念或说明 |
容器 | 容器时计算机群中应用运行的基本单元,它提供了一种轻量级、可移植且隔离的运行环境。容器封装了应用程序及其依赖(如代码、运行时、系统工具、库等),确保应用在不同环境、不同节点、不同硬件上一致运行。 在平台中,开发容器、训练任务、推理服务等工作负载都是被以容器的形式创建、运行与管理的。 请特别注意:在容器中,容器容器本身是轻量级、临时性的运行环境,其文件系统默认采用非持久化存储。因此,用户数据应当存放于容器所挂载的外部存储磁盘空间中,以防容器重启导致数据丢失。 |
工作负载 | LtAI平台中,工作负载特指“容器实例”、“训练任务”或“推理服务”三种容器。工作负载容器中运行着用户所使用的运行环境和应用程序,占用定量的GPU/CPU/内存/网络以及存储资源。 |
算力集群 | 一套由若干服务器、网络设备、存储设备组成的计算机集群,各类设备之间进行了合理的网络连接,形成集中式、可协同的计算资源池,可以向用户提供特定数量的计算资源用于各种计算任务的运行和数据的存储。 |
AI | 人工智能(Artificial Intelligence),是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。例如:人脸识别技术,语音识别技术、基于用户兴趣的智能算法推荐技术。 |
机器学习 | 机器学习(Machine Learning,缩写为ML),是人工智能技术的一种,是研究计算机模拟人类的学习活动,获取知识和技能的理论和方法,改善系统性能的学科。深度学习是一种机器学习技术;而大模型又可算作是一种深度学习技术。 |
大模型 | 大模型技术是指采用深度学习等先进技术构建的具有庞大参数量的神经网络模型,这些模型通常包含数百万至数十亿乃至上万亿的参数。大模型的核心优势在于其强大的泛化能力和表征能力,能够在处理自然语言处理、计算机视觉、语音识别等复杂任务时展现出优越的性能。 |
K8S | Kubernetes,是一个容器编排引擎,用来对容器化应用进行自动化部署、扩缩和管理。 |
分布式文件系统 | 分布式文件系统(Distributed File System, DFS)是一种特殊的文件系统管理方式,它使得文件系统的物理存储资源能够跨越多个通过计算机网络连接的节点,而非局限于单一本地节点上。这一设计允许将存储资源分散到网络中不同的位置,同时向用户提供一个统一的、逻辑上的树形文件系统结构,从而使得访问和管理分布在不同地点的文件如同操作本地文件一样便捷。 |
IB网络 | 即InfiniBand网络,是一种高性能计算机网络通信标准,设计用于提供极高的数据传输带宽和极低的延迟,以满足特定应用场景下对数据传输速度和效率的严苛要求。InfiniBand技术最初是为了替代早先的PCI总线和其他系统互连技术而开发的,后来发展成为一种主要面向数据中心、高性能计算(HPC)集群和企业级存储的网络解决方案。 |
RoCE网络 | RoCE(RDMA over Converged Ethernet)网络是一种技术,它允许在以太网上实现远程直接内存访问(RDMA)。RDMA技术能够让网络中的数据直接从一台服务器的内存传输到另一台服务器的内存中,绕过了传统的网络协议栈和操作系统处理过程,从而显著降低数据传输的延迟并提高网络的吞吐量。 |
3. 主要功能使用说明
LtAI平台最主要的功能是“容器实例”、“训练任务”、“模型推理服务”三类工作负载的创建、管理与访问,同时还提供了工作负载运行所需要的“数据与存储”、“镜像库”、“模型列表”等资源的管理功能。
本节将首先介绍数据与存储、镜像库和模型列表三类资源的管理功能,然后介绍容器实例、训练任务、模型推理服务三类核心工作负载的使用方式。
3.1. 资源管理功能介绍
下面介绍数据与存储、镜像库和模型列表三类资源的管理功能。
3.1.1. 磁盘存储管理功能
“磁盘存储”是用户在计算集群对应存储集群上申请的一块指定大小的存储空间,用户可以将数据和代码放入该存储空间进行持久化存储。磁盘存储是用户可以使用的持久化存储空间的基本对象,用户可以将磁盘存储挂载到容器实例、训练任务、推理服务等各类工作负载上,以便读写磁盘存储中的数据。
下文将介绍的“数据集”和“模型”两种对象都是基于磁盘存储创建的。
磁盘存储管理功能入口在 [机器学习 – 磁盘存储] 菜单项(见图 1)。
进入“磁盘存储”页面后会显示当前用户可以访问的磁盘存储的列表(图 2)。
列表显示了磁盘存储的ID、名称、别名、访问权限、所属存储集群、限额大小、是否对其他用户只读、创建和更新时间等信息,并提供了编辑、删除两种操作。
创建磁盘存储
点击页面左上的“创建磁盘”按钮,用户可以创建一个磁盘存储空间,如图 3所示。
用户需要填写表单中的信息并点击确认按钮以创建一个磁盘存储。需要注意以下字段的填写要求:
‒ 存储集群:选择在哪个存储集群上创建这个存储空间;当存在多个计算机群时,用户的工作负载只能挂载那些在相同区域的存储集群上创建的磁盘存储空间(界面上,在计算集群名称左边会通过彩色的标签来显示存储集群所在的区域,如上图中的 [GUIZHOU] 标签表示区域名称为“GUIZHOU”)。
‒ 权限:是指所创建磁盘的可见范围,可以选择“个人私有”、“团队共享”、“全局共享”三种可见范围。其中“个人私有”是指该资源只有当前用户自己可见;“团队共享”是指该资源能够让同项目的用户可见;“全局共享”是指该资源是平台上所有用户可见的,只有管理员具有权限配置“全局共享”的资源。
‒ 大小:是指这个磁盘存储空间的限额大小(单位为G字节),需要填写整数,后加“Gi”作为单位。
‒ 只读:当权限配置为“团队共享”或“全局共享”时,通过次选项设置该磁盘存储空间是否对其他用户可读。
‒ 路径:配置该磁盘空间在存储集群中保存的路径。一般留空不填,以避免路径出现冲突导致磁盘空间创建失败。
查看磁盘存储
在磁盘存储的列表上,点击磁盘存储的名称,可进入“磁盘详情”页面:

图 4 磁盘详情
点击“文件”标签可以查看磁盘中的文件列表,并提供上传文件、删除文件的操作。
编辑磁盘存储
在磁盘存储的列表中,点击“操作”列的“编辑”按钮,可以对磁盘存储的信息和配置进行编辑调整,操作内容与“新建磁盘存储”一致。
删除磁盘存储
在磁盘存储的列表中,点击“操作”列的“删除”按钮,经过二次确认后,可以将磁盘存储删除掉。
注意:删除磁盘存储的操作是不可逆的,会丢失用户在磁盘存储中保存的所有数据,无法恢复。
如何读写磁盘存储中的数据
前面所述平台界面提供的查看磁盘存储功能中可以上传和删除磁盘存储中的数据,但通过界面进行磁盘存储中的数据速度很慢、上传和下载文件的大小也受到限制(一般限制在30M字节以内),因此不建议用户通过界面进行磁盘存储中数据的访问。
比较方便地访问磁盘存储中数据的方式是以“读写”权限将磁盘存储挂载到“容器实例”中,通过容器实例提供的SSH端口进入容器实例,在其中的操作系统下对磁盘存储中的数据进行读写。具体可参见第3.2节容器实例相关的操作。
3.1.2. 数据集管理
数据集是承载计算任务相关信息的数据集合,可用于模型的开发、训练、验证和测试。
LtAI提供了数据集的管理功能,入口在 [机器学习 – 数据集] 菜单项,如图 5所示。
进入数据集页面后,会显示一个数据集列表,如图 6所示。列表中显示了用户可以访问的各数据集的相关信息,包括ID、名称、标签、状态(是否已发布)、权限(可见范围)、所在的磁盘存储、文档信息、创建和更新时间,并提供了编辑、发布、导入、删除的操作

数据集提供了版本管理的功能,用户新创建的数据集处于“初始化”状态,此时数据集不能供其他用户使用;用户进行了“发布”操作后,将形成一个版本,此时该数据集如设为“团队共享”或“全局共享”的状态,就可以被其他用户使用了。
创建数据集
图 7 创建数据集
用户需要填写表单中的信息并点击确认按钮以创建一个数据集。需要注意以下字段的填写要求:
‒ 存储磁盘:指定数据集存放于哪个“磁盘存储”中。因此,在创建数据集之前必须先创建一个磁盘存储。
‒ 数据集路径:指定数据集在磁盘存储中存放的路径。
‒ 数据集权限:设置数据集的可见范围,可以选择“个人私有”、“团队共享”、“全局共享”三种可见范围。其中“个人私有”是指该资源只有当前用户自己可见;“团队共享”是指该资源能够让同项目的用户可见;“全局共享”是指该资源是平台上所有用户可见的,只有管理员具有权限配置“全局共享”的资源。
数据集创建后,其状态处于“初始化”状态,此时只有创建数据集的用户可以挂载该数据集,对数据集数据进行访问。
编辑数据集
在数据集列表页面上,点击“操作”列的 [编辑] 按钮,可对数据集的基本信息进行配置,其界面和操作与创建数据集一致。
查看数据集详情
在数据集列表页面上,点击数据集的名称,可以查看该数据集的详情信息。包含了数据集的基础信息详情、版本列表和文件列表。

图 8 数据集详情的版本列表
发布数据集
在数据集列表页面上,点击“操作”列的 [发布] 按钮,即可发布数据集。发布数据集的操作会生成数据集的一个新版本。发布后的数据集可以被其他用户挂载使用。
导入数据集
在数据集列表页面上,点击“操作”列的 [导入] 按钮,会弹出对话框,填写一个可公开访问的Git仓库地址,系统会在后台自动从该Git仓库地址导入数据集。

图 9 导入数据集
删除数据集
在数据集列表页面上,点击“操作”列的 [删除] 按钮,经过二次确认后,可以将数据集删除掉。
注意:删除数据集的操作是不可逆的,会丢失数据集中的数据,无法恢复。
3.1.3. 镜像仓库管理
镜像仓库是平台在创建工作负载时拉取镜像的源头,用户可以将公共或私有的镜像库地址和账号纳管到平台中,使得平台能够从这些公共镜像库或私有镜像库拉取镜像。
镜像仓库入口在 [机器学习 – 镜像仓库] 菜单项,如图 10。

进入“镜像仓库”页面后会显示当前用户可以访问的镜像仓库的列表(图 11)。
创建镜像仓库
点击镜像仓库列表左上角的 [创建镜像仓库] 按钮,可以创建一个镜像仓库(图 12)。

用户需要填写表单中的信息并点击确认按钮以创建一个镜像仓库。需要注意以下字段的填写要求:
‒ 平台仓库:指定镜像仓库是否是平台内置的Harbor镜像库中的镜像仓库。平台提供一个默认的Harbor镜像库,用户可以使用该镜像库中的命名空间(或项目)作为一个镜像仓库;
‒ 权限:指定该镜像仓库的可见范围。
‒ 仓库地址:指定镜像仓库的地址。这里的镜像仓库地址可以是互联网上提供服务的公共镜像库地址,例如阿里云镜像库(registry.cn-beijing.aliyuncs.com等)、NVidia镜像库(nvcr.io)等;也可以是用户能够访问的私有化部署的镜像库(基于harbor、registry等软件部署的镜像库)。注:需要保证算力集群中的服务器能够访问用户提供的镜像仓库。
‒ 命名空间:镜像仓库中的命名空间或项目。
‒ 仓库账号和仓库密码:能够访问上述仓库地址、命名空间的账号和密码。注:如需使用容器实例的“保存镜像”功能,则该账号要具有推送镜像的权限。
3.1.4. 容器镜像列表管理
容器镜像功能用于注册一个平台上可用的镜像。入口在 [机器学习 – 容器镜像] 菜单项,如下图所示。
图 13 容器镜像管理入口
进入容器镜像页面后可以看到用户可见的容器镜像镜像列表,如图 14所示。列表显示了每个镜像的ID、所在命名空间、镜像名称、镜像tag、标签、所在镜像仓库、镜像的用途、镜像状态、权限、创建和更新时间,并提供了编辑镜像信息、导出镜像、导入镜像和删除镜像的操作。
创建容器镜像(注册容器镜像)
点击容器镜像列表左上角的 [创建镜像] 按钮,可进入创建容器镜像页面。
首先要选择镜像所在的“镜像仓库”,然后填写镜像名称、镜像标签、镜像用途、镜像权限等信息,也可填写镜像默然使用的工作目录、启动命令等内容。

图 15 创建容器镜像(注册容器镜像)
用户需要填写表单中的信息并点击确认按钮以创建(注册)一个容器镜像。需要注意以下字段的填写要求:
‒ 镜像仓库:选择镜像所在的镜像仓库。若要注册一个第三方公开库中的容器镜像,则选中 [第三方公开镜像] 选项,然后填写镜像地址即可,例如要注册NVCR中的PyTorch镜像,可填入:
nvcr.io/nvidia/pytorch:25.05-py3,如图 16所示。
‒ 镜像用途:指定镜像的用途,分为四类,如下表所示。
表 2 镜像用途类型
镜像用途 | 用途说明 |
ECS | 用于“容器实例”功能的镜像,例如Jupter镜像、VSCode镜像 |
训练 | 用于创建训练任务的镜像 |
推理 | 用于创建模型推理服务的镜像 |
通用 | 其他类型的镜像,例如nginx、busybox等,可在“容器实例”功能使用 |
‒ 镜像权限:指定镜像的可见范围。可以选择“个人私有”、“团队共享”、“全局共享”三种可见范围。其中“个人私有”是指该资源只有当前用户自己可见;“团队共享”是指该资源能够让同项目的用户可见;“全局共享”是指该资源是平台上所有用户可见的,只有管理员具有权限配置“全局共享”的资源。
‒ 工作目录:基于镜像启动工作负载时,配置的工作目录。
‒ 启动命令:基于镜像启动工作负载时,所使用的启动命令。如不配置则将使用镜像定义的CMD或ENTRYPOINT启动容器;如定义,则覆盖镜像内的ENTRYPOINT,用于启动容器。
‒ 启动参数:基于镜像启动工作负载时,将启动参数加到启动命令之后,作为启动命令的参数使用。
‒ 环境变量:用于镜像启动工作负载时,所配置的环境变量。
注:工作目录、启动命令四项的配置将作为“默认”数据,在创建工作负载时,当用户选择该镜像时,这两项配置将自动填充到工作负载的“工作目录”、“启动命令”、“启动参数”、“环境变量”中作为默认的配置(用户可以在此基础上进行修改)。
这四个参数对于容器镜像的易用性非常重要,与容器镜像内的设置紧密关联,因此在此处应当进行合理的配置,以便在用户使用该容器镜像时不必再重复配置这些信息。
启动命令是容器启动时要运行的命令,一般要对容器运行环境进行初始化配置,并启动容器中所需要运行的应用层程序(服务或任务)。例如,Jupyter(AI开发人员常用的开发环境)镜像,可配置如下的启动命令:
bash -c "echo root:{{ password }} | chpasswd ; sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords yes/g' /etc/ssh/sshd_config ; sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config ; service ssh restart ; jupyter lab --notebook-dir=/ --ip=0.0.0.0 --no-browser --allow-root --port=3000 --NotebookApp.token='' --NotebookApp.password='{{ hashed_password }}' --ServerApp.disable_check_xsrf=True --NotebookApp.allow_origin='*' " |
其中,bash 是启动命令,-c及后面的双引号内是启动命令的参数(参数内容也可以放在“启动参数”中进行维护)。由于bash是linux的命令行解释器,因此上述这条启动命令的核心是 -c 后双引号内部的部分,是实际上启动容器时要执行的指令,以下对这部分内容进行说明:
# 修改root用户的密码,密码为LtAI平台提供的密码 echo root:{{ password }} | chpasswd ; # 配置ssh服务,允许root用户通过密码登录 sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config ; # 重启ssh服务使配置生效 service ssh restart ; # 启动jupyter的服务,其中将jupyter的登录密码设置为LtAI平台提供的密码 jupyter lab --notebook-dir=/ --ip=0.0.0.0 --no-browser --allow-root --port=3000 --NotebookApp.token='' --NotebookApp.password='{{ hashed_password }}' --ServerApp.disable_check_xsrf=True --NotebookApp.allow_origin='*' |
上述启动命令中引用了两个LtAI平台提供的变量:{{ password }} 和 {{ hashed_password }}。LtAI平台提供的系统环境变量见表 3,这些变量可在启动命令和启动参数中通过“{{变量名称}}”的方式进行引用。
变量 | 说明 | 可用范围 |
password | LtAI随机生成的密码 | 容器实例 |
hashed_password | 按照jupyter的规范处理后的password | 容器实例 |
username | 当前用户的用户名 | 容器实例 |
base_model_path | 基础模型的挂载路径 | 训练任务 |
data_path | 训练数据的挂载路径 | 训练任务 |
output_dir | 输出模型的挂载路径 | 训练任务 |
base_model_id | 基础模型ID | 训练任务 |
base_model_name | 基础模型名称 | 训练任务 |
dataset_id | 数据集ID | 训练任务 |
dataset_name | 数据集名称 | 训练任务 |
train_id | 训练任务ID | 训练任务 |
train_name | 训练任务名称 | 训练任务 |
model_id | 模型ID | 推理服务 |
model_name | 模型名称 | 推理服务 |
model_version | 模型版本 | 推理服务 |
model_path | 模型路径 | 推理服务 |
deployment_id | 部署ID | 推理服务 |
deployment_name | 部署名称 | 推理服务 |
service_name | 服务名称 | 推理服务 |
api_key | API密钥 | 推理服务 |
除上述系统环境变量外,用户可以在“环境变量”中定义镜像运行所需要的环境变量,并通过“${变量名称}”的方式在启动命令和启动参数中进行引用。
通过Dockerfile在线构建容器镜像
在创建容器镜像时,可以选择按最下方的“构建镜像选项”,并在Dockerfile一栏中写入Dockerfile内容,即可在线构建容器镜像,如图 17所示。这种情况不能添加外部文件,只能执行Dockerfile中的命令,适用于简单构建的场景。
线下构建镜像
对于复杂镜像环境的容器镜像构建,建议在线下进行,即在用户使用的终端PC或笔记本电脑上构建。
以下步骤是构建一个基于JupterLab、包含cuda和pytorch的镜像,可作为线下构建容器镜像的参考。
1) 首先需要在本地部署docker环境;
2) 检查宿主机驱动,选择与驱动版本对应的cuda版本并下载至本地;(镜像环境不需要安装驱动),
兼容性可参考网址:
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#driver-compatibility

下载地址:https://developer.nvidia.com/cuda-toolkit-archive

3) 编写conda环境的构建文件 environment.yml,内容如下:
name: py310 channels: - pytorch - nvidia - defaults dependencies: - python=3.10 - pytorch=2.5.0 - torchvision=0.20.0 - torchaudio=2.5.0 - pip |
4) 编写Dockerfile文件:
# 使用基础镜像,如果使用平台镜像需要和平台镜像名一致 FROM harbor.gzu.atcloud.xyz/aidc/jupyter:latest
# 设置镜像维护者 LABEL maintainer="your-email@example.com"
# 将 environment.yml 文件复制到容器中 COPY environment.yml /tmp/environment.yml
# 创建 Conda 环境 RUN conda env create -f /tmp/environment.yml
# 安装cuda COPY ./cuda_12.4.1_550.54.15_linux.run /tmp/cuda_12.4.1_550.54.15_linux.run RUN chmod +x /tmp/cuda_12.4.1_550.54.15_linux.run RUN /tmp/cuda_12.4.1_550.54.15_linux.run --silent --toolkit
# 删除安装文件 RUN rm /tmp/cuda_12.4.1_550.54.15_linux.run
# 设置容器启动时默认运行的命令,如果不设置即为基础镜像的默认启动命令
|
5) 本地构建镜像并推送到镜像仓库:
# 构建镜像 docker build -t harbor.gzu.atcloud.xyz/aidc/jupyter:pytorch-2.5 . # 将镜像push到仓库中 docker push harbor.gzu.atcloud.xyz/aidc/jupyter:pytorch-2.5 |
6) 在平台中创建容器镜像(注册容器镜像),并编辑镜像名称,镜像标签及启动命令。
3.1.5. 模型列表管理
模型列表维护了平台中AI模型的信息。模型列表中的模型也是存放在磁盘存储中的一个路径。
模型列表管理功能入口在 [机器学习 – 模型列表] 菜单项,参见图 18。

模型列表的操作与数据集的操作非常类似,具体使用方法可参考3.1.2节。
模型除了可以在训练任务、推理服务中使用外,在训练任务成功完成之后会根据用户添加模型名称自动为用户注册训练任务产出的模型到模型列表。
3.2. 容器实例的使用
LtAI平台提供的“容器实例”功能提供了灵活的容器创建能力,可用于多种使用场景,例如创建模型开发环境、创建模型推理服务、创建Web服务,甚至创建一个单机模型训练环境等。
重点注意:容器中的数据是非持久化的,当容器停止或重启后,存放在容器中的数据将会被清空。需要持久化保留的数据,请存放在磁盘存储中(需要在创建容器时将磁盘存储挂载到容器中)。 |
注:容器实例功能只支持单机(多卡或单卡)的运行环境,不支持多机多卡的运行环境。
容器实例功能的入口在 [机器学习 – 容器实例] 菜单项,如图 19所示。

3.2.1. 容器实例列表
进入容器实例页面,您可以看到一个容器实例列表,如图 20所示,显示了用户可以访问的容器的ID、名称、状态、权限(可见范围)、所使用的算力规格、容器镜像、创建和更新时间等信息,此外提供了快捷工具和操作两类操作。
其中容器实例的状态可能是“启动中”、“运行中”、“停止中”、“已停止”中的一种:启动中表示容器实例处于启动过程,这个状态下容器可能在等待资源、拉取镜像、创建容器;启动完成后,容器实例会变更为“运行中”状态,用户可以通过快捷工具列或操作列中的按钮对容器实例进行操作;用户可对“运行中”进行“停止”操作,操作后容器实例状态变为“停止中”,平台会停止运行中的容器、释放容器所占用资源(容器挂载的磁盘存储只会从容器中卸载掉、不会释放或删除磁盘存储及其中的数据);停止操作完成后,容器实例状态会变为“已停止”。
列表的快捷工具列,对“运行中”状态的容器实例提供了Web界面访问和其他接口访问方式,具体参见3.2.4。
列表的操作列,提供了启动、停止、删除容器的操作,以及查看日志、登录终端、保存镜像、编辑容器实例配置等操作。
3.2.2. 容器实例的创建
点击容器实例列表左上角的 [创建容器实例] 按钮可以创建一个容器实例,创建容器实例的页面如图 21所示。
创建容器实例,需要填写以下内容:
― 实例名称:编写一个易读易懂的容器名称,可以是中文;
― 共享范围:可以选择“个人私有”、“团队共享”、“公共共享”;
― 资源选择:选择所使用的算力资源和资源规格;
― 挂载存储:挂载前面所述的“磁盘存储”,并确定存储在容器中的挂载路径(例如/mnt/data),以及挂载后容器内对磁盘存储的读写权限(“只读”或“读写”);
― 容器镜像:选择启动容器所使用的容器镜像;一般选择ECS或“通用”类型的镜像,如下图:

容器镜像必须是在“容器镜像”功能页面中注册好、可访问的镜像。
― 工作目录:容器镜像启动时的工作目录;
― 启动命令:镜像如果有特别的启动命令,可以在此填写和编辑;参见第3.1.4节“创建容器镜像(注册容器镜像)”小节中的相关说明;
― 启动参数:额外的启动参数;参见第3.1.4节“创建容器镜像(注册容器镜像)”小节中的相关说明;
― 环境变量:启动容器时,额外需要配置的环境变量;参见第3.1.4节“创建容器镜像(注册容器镜像)”小节中的相关说明;
― 端口映射:填写所需要暴露的容器内部运行的服务的端口;配置端口映射后,在容器运行中用户可以通过容器实例列表快捷工具列的 [SSH] 按钮的弹出菜单给出的信息,对端口对应的服务进行访问,如下图所示。
图 22 容器实例端口映射的访问方式
3.2.3. 对容器实例的操作
对于运行中状态的容器实例,LtAI提供了“停止”、“登录终端”、“保存镜像”、“编辑端口”、“删除实例”等操作。

图 23 对容器实例的操作
其中“保存镜像”的功能可以将当前运行中的容器状态保存为一个容器镜像,并放入容器镜像列表。保存成功后该容器镜像就可以作为创建各类工作负载的镜像了。
点击 [保存镜像] 按钮后,会进入“保存镜像”页面,如图 24所示,对其操作与第3.1.4节的描述一致。平台会自动生成一个包含时间戳的镜像标签,用户可以根据需要修改该标签。

点击页面最下面的 [确定] 按钮后,该镜像会添加到“容器镜像列表”中,状态为“创建中”,如图 25所示,平台会在后台进行镜像保存的操作。
当该容器镜像保存完成后,在容器镜像列表中该镜像的状态变为“就绪”,这个镜像就可以用于创建各类工作负载了。
需要说明的是,这种镜像保存方式所保存的镜像并不分层,将对应容器实例的文件空间整体保存为一个镜像,其中包含大量临时数据、日志数据和运行时状态数据,导致这类镜像会比较大,且创建容器时会比较慢。由于这个操作会牵扯到较大的数据存储和数据传输,受到网络、存储、运行环境等各方面的限制,可能会出现创建时间过于长、甚至于镜像创建失败的问题。
因此,我们不建议经常采用这中方式创建镜像,如果条件允许,尽可能采用第3.1.4节中“通过Dockerfile在线构建容器镜像”或“线下构建镜像”两种方式来创建镜像,这样创建的镜像会采用分层方式构建、且其中不包含无用的临时数据、日志数据和状态数据,镜像规模较小、运行效率较高。
3.2.4. 如何访问容器实例
对于运行中的容器实例,平台提供了多种方式访问容器(通过容器内的服务)。
通过Web界面访问
容器一般用于运行特定的一个应用程序/服务(例如开发环境、监控、文档/图片编辑、标注等),很多容器会提供一个Web界面供用户使用该容器内封装的应用。平台为这类Web界面提供了标准的访问方式,通过点击容器实例列表快捷工具列中的 [Web] 按钮(图 26),即可访问该容器的Web界面(图 27)。


注:若用户需要自行创建具备Web页面的容器镜像,需要将访问Web界面的端口绑定到容器的3000端口。
访问容器实例暴露的各类端口
通过点击容器实例列表快捷工具列中的 [SSH] 按钮(图 28)可以查看容器实例所暴露的各种服务端口,用户可以使用对应的客户端来访问容器内对应的服务(参考图 29中通过telnet访问容器暴露的端口)。
特别的,平台提供了标准的SSH访问方式,用户可以通过复制图 28中的SSH信息和密码信息,通过ssh命令来登录到容器实例进行各种操作(图 30)。
通过SSH方式登录和访问容器实例可以方便地进行文件传输、文件下载、文件移动/删除等操作,因此,可通过创建容器并挂载磁盘存储/数据集/模型,来对磁盘存储/数据集/模型中的数据进行访问(读、写、删、查)。
注:通过SSH方式访问容器实例的前提是容器镜像制作中加入了ssh服务,将该服务启动在22端口,并允许特定用户可以通过密码方式进行ssh登录。
通过平台提供的Web SSH访问容器实例
平台提供了Web SSH方式用于访问容器实例的SSH服务,如图 31所示。

3.2.5. 容器实例的服务端口配置
如3.2.2节所述,在创建容器时用户可以配置容器实例对外暴露的端口。此外,在容器运行过程中,用户也可以动态修改容器实例对外暴露的端口(),而无需重启容器。

图 32 容器实例运行中编辑端口
3.2.6. 容器实例运行状态监控
容器实例启动成功后,可以在容器实例详情中查看日志和监控来追溯容器实例的状态(参见图 33、图 34)。
3.3. 推理服务的使用
用户可以基于内置的开源模型或者训练出来的模型启动推理服务。通过全局导航进入「机器学习」-「推理服务」功能模块页面(图 35)。

3.3.1. 创建推理服务
推理服务支持有状态和无状态两种部署模式,并且支持动态扩缩容(图 36)。
点击「创建服务」按钮,填写表单并提交即可生成推理服务。
3.3.2. 动态扩缩容
在推理服务列表中点击操作列中“更多 – 调整容量”即可进行推理服务副本容器数量的动态调整。

图 37 动态扩缩容
3.3.3. 推理服务的访问
平台提供了基于OpenAI规范的模型推理服务访问接口,点击推理服务列表中的 [设置模型] 按钮即可查看接口的访问方式(图 38)。在该对话框中还可以对模型的参数进行配置。

按照OpenAI的接口规范,即可对推理服务进行访问,如图 39所示。
3.4. 训练任务的使用
在 [机器学习-训练任务] 页面,可通过Web界面快速创建大模型/机器学习的模型训练任务,用户可按需选择所需的GPU资源,支持多机多卡分布式大规模训练。
进入训练任务页面,可以看到训练任务列表,如图 40所示,会显示用户可见的训练任务的信息,包括ID、名称、状态(初始化、成功、失败、已停止)、权限(即可见范围)、所使用的训练框架、基础模型、输出模型名称、所使用的数据集,并可以查看所使用的资源信息和训练参数。
点击左上角的 [创建训练] 按钮可以创建一个新的训练任务。
创建资源任务的视图如图 40所示。
图 41 创建训练任务
模型训练任务支持多种类型的训练框架,根据训练框架的不同用户可以为训练任务配置不同的角色及其资源需求,平台会自动调度资源进行模型的训练。训练成功后平台会自动注册训练产出的模型,训练如果失败或终止则不会自动注册模型。
图 42 对多种训练框架的支持
平台提供了训练模板功能(图 43),方便用户把常用的训练镜像、启动命令、启动参数、环境变量、基础模型等信息保存为模板,根据模板快速的发起训练。

4. 常见问题
本节将一些用户使用中常见的问题进行了汇集和解答。
4.1. 我属于哪个域,应该找哪个管理员?
用户可以点击左上角来查看所属域/项目,以便于在需要的时候联系域管理员;

4.2. 为什么我创建的磁盘在容器实例里是只读的,写入不了数据?
可以检查在容器实例页面点击容器实例名,看看挂载选项是否为只读。
4.3. 为什么我的容器实例访问不了?
是否启动的是ECS镜像(是否有web服务),web服务的端口是否是3000(默认端口)。
4.4. miniconda3这个容器实例的路径下的文件是临时的吗?
目前提供的默认jupyter是自带conda环境,所以不需要重新安装miniconda。但是在实例中安装的package(pip/conda install)默认没有放在存储磁盘下,所以如果重启之后,jupyter实例会恢复到初始环境(也就是只有miniconda,没有后续安装的那些package)。
如果需要将环境持久化,可以试试采用这种方式将创建的conda环境放在存储磁盘上:
export CONDA_ENVS_PATH=/path/to/your/new/envs
conda create -n myenv python=3.8
或者
conda create -n myenv python=3.8 --path /path/to/your/new/envs/myenv
4.5. 我的conda环境应该存放在磁盘存储中吗?
用户需要按照自己研发的实际需求创建conda环境,因此conda环境无法统一成一个标准的模版。而在用户基于容器进行开发和训练时,conda环境中的库会被频繁调用,因此还需要确保容器能够能够有高性能地读写conda环境中的库和数据。
在上述需求的约束下,将conda环境存放在磁盘存储中是不合适的。原因就是磁盘存储是通过网络挂载到容器中的,实际环境中由于用户数量较大以及存储带宽的限制,容器对磁盘存储的读写的性能低于对容器所在宿主机本地存储的读写,因此,最好是将conda环境存放在容器镜像中。
而平台又无法提供满足所有用户的统一的标准镜像,因此,建议用户根据自己的需求,构建自用的容器镜像来启动开发容器。
构建容器镜像的方法参考3.1.4节的相关内容,建议通过Dockerfile的方式线下构建自用的容器镜像。