构建自定义镜像
非预置镜像均称为自定义镜像,存储在租户的私有租户镜像仓库中。本文描述如何在 AIStudio 平台通过多种方式创建自定义镜像。
NOTE
当前租户的自定义镜像,均会展示在镜像中心的自定义镜像标签页。如果在创建开发机、任务、推理服务时,无法在自定义镜像列表中无法找到自定义镜像,请检查创建实例的资源池与该镜像的可用资源池是否一致。
镜像大小限制
单个镜像大小不能超过 50 GiB。
镜像基础组件要求
如果您的镜像用于开发机,推荐在镜像中包含平台要求的必要组件:
以 Ubuntu 为例:
apt update && apt install openssh-server sudo runit runit-systemd -y
如果镜像中缺失上述组件,在启动开发机时平台会尝试安装,但仍可能安装失败导致开发机无法正常启动。
在镜像中心快速构建镜像
AIStudio 镜像中心支持多种从网页端快捷创建自定义镜像的方式,包括基于现有的预置镜像或自定义镜像、基于 dockerfile,或直接保存运行中的开发机为镜像。
这种方式构建的镜像将直接保存到租户私有镜像仓库,无需推送。
切换到自定义镜像标签页后,点击构建镜像。进入创建页面后,请根据页面提示,完成以下配置。
镜像名称及 tag:填写符合要求的名称与镜像标签。
可用服务:如果您希望镜像被用于开发机和任务,可根据需要进行勾选。
镜像构建资源池:选择可使用该镜像的资源池。如果下拉列表只有一项,选择默认值即可。如果有多项,说明您的计算资源分布在多个可用区(例如,宁夏、广东等)。列表中的每一行为该可用区中的所有资源池,请选择希望使用该镜像的资源池。单次构建操作仅支持选择一个可用区的所有资源池。
构建方式:自定义镜像的构建方式有如下三种,下文中提供了具体示例。
方式 说明 基于现有镜像 可使用平台预置镜像,或镜像中心的自定义镜像。在基础镜像上,可使用 apt-get
、pip install
安装其他软件。基于 dockerfile 直接编写 dockerfile 。 基于现有开发机 导出开发机 rootfs 并另存为自定义镜像,仅支持选择正在运行的开发机。保存开发机为镜像时,请停止开发机内的读写操作。
基于现有镜像
如果您对某个现有的预置镜像或自定义镜像比较熟悉,需要扩展该镜像,可在该镜像基础上使用 apt-get
、pip install
等方式安装其他软件。
填写自定义镜像的基础信息后,选择基于现有镜像,在「安装命令」输入框中编写需要执行的 Shell 命令。以下示例以平台预置 Ubuntu 22.04 镜像为基础,安装了一些网络工具、传输工具、开发工具等。
# 更新APT包列表
apt-get update
# 安装系统工具
# -y: 自动确认所有提示,避免交互式输入
# --no-install-recommends: 仅安装核心依赖,不安装推荐的附加包(本脚本中已省略该选项,因此会安装推荐依赖)
apt-get install -y htop # 系统资源监控工具,比 'top' 更直观
apt-get install -y dnsutils # DNS工具包,提供 nslookup 和 dig 等DNS查询工具
apt-get install -y traceroute # 网络路径跟踪工具,用于跟踪数据包的传输路径
apt-get install -y netcat-openbsd # 网络工具包,提供 nc 命令,支持端口扫描和网络连接测试
apt-get install -y tcpdump # 网络数据包分析工具,用于抓包和分析网络流量
apt-get install -y host # 简单的DNS查询工具
apt-get install -y whois # 域名注册信息查询工具
apt-get install -y emacs-nox # Emacs命令行版本(不包含图形界面)
apt-get install -y nano # 简单易用的文本编辑器
apt-get install -y rsync # 高效的文件同步和传输工具
# 清理APT缓存以减少空间占用
apt-get clean
rm -rf /var/lib/apt/lists/*
# 使用pip安装Python包
# --quiet: 减少安装过程的输出信息
# --no-cache-dir: 不缓存下载的包
python3 -m pip install --quiet --no-cache-dir --upgrade pip # 升级 pip
python3 -m pip install --quiet --no-cache-dir ipython # 增强的交互式Python解释器
python3 -m pip install --quiet --no-cache-dir jupyterlab # 基于Web的交互式开发环境
基于 Dockerfile
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层。使用 Dockerfile 定制镜像,可以很好解决镜像构建透明性、镜像体积等问题。
填写自定义镜像的基础信息后,选择基于 Dockerfile,在「Dockerfile」输入框中编写文件内容。以下示例来自教程Xinference 安装指南,该示例以 Ubuntu 22.04 为基础镜像,安装 Xinference 和大模型推理引擎 vLLM。
# 以平台预置镜像为基础,在其上进行定制(可从镜像中心获取镜像地址)
FROM cr.infini-ai.com/infini-ai/ubuntu:22.04-20240429
# --no-cache-dir: 不缓存下载的包,减少镜像体积
RUN python3 -m pip install --no-cache-dir "xinference[vllm]" \
&& python3 -m pip install --no-cache-dir flashinfer -i https://flashinfer.ai/whl/cu121/torch2.4/
如何编写 Dockerfile 不在本文档范围以内,您可以参考网络资源。
TIP
您可以使用 Dockerfile 方便地构建系统级 CUDA / cuDNN 环境。我们提供了一些示例,详见获取系统级 CUDA。
基于现有开发机
如果您希望保存开发机中环境配置,以便复用环境,可以直接将运行中的开发机保存为自定义镜像。
填写自定义镜像的基础信息后,选择基于现有开发机,在下拉列表中选择可见的开发机即可。如果填写排除的路径,镜像中将不会保存该路径的数据。
WARNING
使用 Docker 命令构建镜像
如果您更习惯使用 Docker CLI,也可在 AIStudio 开发机中构建镜像。
您需要为开发机启用Docker 容器功能,随后可在开发机中使用 docker pull/push/build
等命令制作镜像,并可推送到租户镜像仓库。详见 制作镜像。
查看构建结果
构建完成后,您可以在自定义镜像标签页中查看您的镜像。构建镜像时间与具体操作有关,可能从几分钟到几十分钟不等。但是如果超过 30 分钟,镜像构建任务会直接超时并失败。
点击列表中的可用资源池可查看该镜像在哪些资源池中可用。弹窗中同时会展示镜像所在仓库的存储剩余额度。
NOTE
如果直接构建镜像失败,可尝试在开发机内安装依赖项目,再将开发机保存为自定义镜像。如果问题持续,请联系无问芯穹技术支持。
查看构建日志
在自定义镜像构建过程中和构建完成后,均可以在自定义镜像标签页中查看镜像构建日志。点击列表中的构建日志可展开日志面板,可根据日志根据构建进度,或分析镜像构建失败的原因。
NOTE
在镜像中心快速构建的镜像才有构建日志。使用其他方式并推送到租户镜像仓库的镜像无构建日志。
限制可用服务范围
租户自定义镜像默认可用于开发机、推理服务、任务。如需限制该镜像的可用服务,请通过页面上的编辑按钮修改可用服务。