跳转至

DevPod 使用指南

概述

DevPod 是阿里云提供的一站式云端 AI 开发环境,集成了 VS Code、Jupyter Notebook 与终端命令行等多种开发工具,支持快速启动模型开发任务。用户无需本地配置复杂环境,即可基于预置或自定义镜像,高效开展 AI 模型训练、调试与部署工作。

DevPod 提供了完整的开发、调试、部署一体化体验,让开发者可以专注于模型开发本身,而无需关心环境配置问题。

先决条件

在开始之前,请确保您已完成以下准备工作:

  1. 拥有一个阿里云账号
  2. 登录 FunModel 控制台

    根据控制台的指引,完成 RAM 相关的角色授权等配置;如果您当前使用的是旧版控制台页面,请点击右上角的“新版控制台”按钮,切换至新版界面后再进行操作。

快速开始

创建 DevPod

通过控制台创建 DevPod 实例:

  1. 访问 FunModel 模型市场
  2. 点击 自定义开发
  3. 配置以下关键参数:
参数 说明
模型环境 选择预置的深度学习框架环境(如 PyTorch、TensorFlow),或指定自定义镜像(见下文要求)
名称 为实例设置一个便于识别的名称
地域 选择 DevPod 实例部署的阿里云地域(如 cn-hangzhou
模型描述 简要说明模型用途、功能或开发目标
资源配置 根据任务需求选择 CPU、内存及 GPU 规格
存储配置 配置实例挂载的 NAS 存储空间大小与类型
角色名称 指定用于访问云资源的 RAM 角色(需具备必要权限)

自定义镜像要求

若选择自定义镜像,需满足以下条件以确保 DevPod 正常运行:

  • 操作系统:基于 AMD64 架构的 Linux 系统,最低要求 glibc 2.28 推荐基础镜像:debian:10ubuntu:20.04centos:8 或更高版本
  • 预装工具:必须包含 curl 命令
  • 用户权限:默认用户为 root
  • 可选支持:如果需要使用 jupyter,则镜像中需安装 Python ≥ 3.8 且包含 pip 命令

开发和调试

在 DevPod 环境中开发您的应用:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Welcome to Devpod!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

运行应用:

python app.py

提示: DevPod 内置开发镜像默认都有一个示例代码 main.pyrun.sh,可以直接运行 run.sh 启动应用

确认配置无误后,点击 DevPod 开发调试

访问与管理实例

进入 DevPod 控制台后,可使用以下三种开发界面:

  • VS Code:基于 openvscode-server 的在线 IDE,适合代码编写与调试
  • Jupyter Notebook:适用于交互式深度学习实验
  • Terminal:提供完整的 Linux 命令行环境

持久化存储

存储说明

所有 DevPod 实例均挂载一个 NAS 目录,路径为 /mnt/<devpod名称>。该目录中的数据不会随实例销毁而丢失,建议将模型权重、训练数据等重要文件存放于此。

DevPod 默认有用的环境变量:

HF_HOME=/mnt/<devpod名称>/hf
MODELSCOPE_CACHE=/mnt/<devpod名称>/modelscope
OLLAMA_MODELS=/mnt/<devpod名称>/ollama

持久化存储的特点:

  1. 制作镜像时不会被 build 到镜像中
  2. 即使 DevPod 删除销毁,内容依然存在
  3. 适合存储大模型文件,控制镜像体积

提示: DevPod 内置开发镜像默认都有一个示例代码 main.pyrun.sh,可以直接运行 run.sh 启动应用,第一次执行 run.sh 会自动下载模型到持久化的 NAS 盘,下载目录为环境变量 MODELSCOPE_CACHE 指向的目录

远程调试 HTTP 服务

DevPod 支持将本地运行的 HTTP 服务通过代理对外暴露,便于远程调试或前端联调。

操作步骤

  1. 在 DevPod 终端启动 HTTP 服务,例如:

    python -m http.server 8000
    

  2. 在 DevPod 控制台的 快速访问 页面获取代理地址,格式如下:

    https://<devpod-id>.cn-<region>.ide.fc.aliyun.com/proxy/8000/
    

  3. 通过该地址访问服务:

    curl https://<devpod-id>.cn-<region>.ide.fc.aliyun.com/proxy/8000/
    

注意事项

对于依赖绝对路径的前端单页应用(如 React、Vue SPA),由于代理路径前缀 /proxy/8000/ 的存在,可能导致静态资源加载失败。

远程调试示意图

镜像构建与保存

您可以将当前 DevPod 实例的完整运行环境(包括代码、依赖、配置)打包为 Docker 镜像,并推送至阿里云容器镜像服务(ACR),实现环境固化与复用。

使用限制

  • 仅支持在 运行中 的 DevPod 实例上执行镜像构建。
  • ACR 实例必须与 DevPod 位于同一地域。虽然 ACR 个人版支持跨地域创建,但为避免网络延迟与推送失败,强烈建议使用同地域实例

ACR 版本对比

特性 个人版 ACR 企业版 ACR
费用 免费 按实例规格计费(计费详情
网络访问 通过公网访问,无需 VPC 配置 必须与 DevPod 同 VPC,通过内网访问,更安全稳定
性能与可靠性 受公网带宽影响,大镜像(≥10 GiB)可能推送失败 内网高速传输,适合大镜像与生产环境
适用场景 个人学习、功能验证、小规模测试 团队协作、生产部署、高可用需求、跨地域分发

准备 ACR 实例

个人版 ACR(推荐用于测试)

  1. 创建个人版 ACR 实例
  2. 创建命名空间
  3. 在命名空间下创建镜像仓库

企业版 ACR(推荐用于生产)

  1. 创建专有网络 VPC 与交换机
  2. 创建安全组并绑定 VPC
  3. 创建企业版 ACR 实例并配置 VPC 访问
  4. 创建命名空间与镜像仓库(参考企业版文档)

构建镜像

  1. 在 DevPod 控制台点击 制作镜像
  2. 选择 ACR 类型(个人版/企业版),填写以下参数:

    配置项 说明
    ACR 地域 选择已创建的 ACR 实例所在地域(必须与 DevPod 一致)
    镜像名称(版本) 自定义镜像标签,如 v1.0latest
    ACR 命名空间 从已创建的命名空间中选择
    ACR 镜像仓库 选择目标仓库(需属于所选命名空间)
    自定义排除路径 可指定不打包的目录(如 /data/cache),避免敏感数据泄露或减小镜像体积
    系统默认排除路径 自动排除:/.function_ai/usr/local/share/jupyter/labextensions

    注意:NAS 挂载目录(/mnt/<name>)中的内容不会被打包进镜像

  3. 点击 开始制作,等待镜像的构建推送完成。

    注意:由于 AI 相关的镜像都很大,第一次构建和推送镜像耗时较长,请耐心等待。

直接部署为在线服务

构建完成的镜像可直接用于部署模型服务。

操作步骤

  1. 在镜像详情页点击 直接部署
  2. 配置以下参数:

    配置项 说明
    启动命令 容器启动时执行的命令(如 /code/run.sh
    监听端口 应用监听的端口(如 8000),需与服务实际端口一致
    超时时间 单次请求最大处理时间(单位:秒)
  3. 点击 开始部署

部署说明:模型服务将与 DevPod 实例位于同一地域,确保低延迟访问。

部署成功以后,可以通过模型列表找到对应的模型服务并进入。此时如果要再次进入 DevPod,需要点击模型服务右上角的 DevPod 开发

在线调试

部署服务成功以后,可以进入在线调试,填写测试 method 和数据等。调试通过后,点击保存,会自动生成 OpenAPI Schema 规范并保存,生成各种语言接入的示例代码。同时生成的 OpenAPI Schema 规范可以导出给 Postman 等 API 调试工具使用。

最佳实践

开发流程

  1. 创建 DevPod 进行开发和调试
  2. 使用持久化存储保存大模型文件
  3. 制作镜像并部署为生产服务
  4. 通过 DevPod 进行迭代优化

资源管理

  • 合理配置 DevPod 实例规格
  • 及时清理不用的 DevPod 实例,及时启停 DevPod 实例,避免空闲资源产生不必要的费用
  • 使用持久化存储避免数据丢失

安全考虑

  • 不在镜像中硬编码敏感信息,存放敏感文件
  • 使用环境变量传递密钥等敏感配置
  • 定期更新基础镜像和依赖库

文件传输

DevPod 支持多种文件上传下载方式:

通过 IDE 界面

  • VSCode 界面左侧目录树支持上传、下载
  • JupyterLab 界面左侧目录树支持上传、下载

通过 WebDAV 协议

通过命令行使用 WebDAV 协议传输文件(有 32M 最大 payload 限制):

# 上传文件
curl -T /tmp/app.py -u root:{containerId} {base_url}/webdav/app.py

# 下载文件
curl -u root:{containerId} -o app.py {base_url}/webdav/app.py

# 删除文件
curl -X DELETE -u root:{containerId} {base_url}/webdav/app.py

故障排除

DevPod 启动失败

问题:DevPod 创建后无法启动

解决方案

  1. 检查自定义镜像是否满足要求
  2. 验证镜像是否可正常拉取
  3. 查看日志排查具体错误

JupyterLab 无法访问

问题:GPU DevPod 中 JupyterLab 启动失败

解决方案

  1. 确认 Python 版本 >= 3.8
  2. 检查是否正确安装 jupyter 相关库
  3. 查看启动日志确认错误原因

镜像部署服务失败

可能原因

  1. 首次部署时,由于镜像体积较大,镜像拉取和加速过程耗时较长,可能导致部署任务因超时而失败。建议稍等片刻,待镜像缓存初步完成后再手动触发一次新的部署。例如,可随意调整某项配置(如将 timeout 值适当调大),以重新启动部署流程。
  2. 部署的启动脚本有问题,比如 host 不是 0.0.0.0,代码中启动的 port 和设置 port 没有对齐等,为什么 GPU 实例启动失败?

文件传输失败

问题:通过 WebDAV 传输文件失败

解决方案

  1. 检查文件大小是否超过 32M 限制
  2. 验证 containerId 和 base_url 是否正确
  3. 确认网络连接是否正常

预置镜像

vLLM 镜像

全球 region 将镜像中的 cn-hangzhou 替换成 ap-southeast-1 即可

  • serverless-registry.cn-hangzhou.cr.aliyuncs.com/functionai/vllm-openai:v0.11.0

相关资源