开发环境

集成了 VS Code Server、Jupyter Notebook 和 JupyterLab,提供在线开发调试功能; 同时也提供 SSH 用于访问容器。

2.1 版本新增: 开发环境支持选择使用平台内置的 Theia IDE。

4.5 版本新增: 开发环境支持选择使用平台内置的 VS Code Server IDE。

4.5 版本移除: 开发环境支持选择使用平台内置的 Theia IDE。

VS Code Server:

https://code.visualstudio.com/docs/remote/vscode-server

VS Code Server 提供集成开发环境,支持在浏览器中进行代码开发。

Jupyter Notebook:

https://jupyter-notebook.readthedocs.io

Jupyter Notebook 支持在浏览器中交互式运行 Python 代码,进行算法开发。

JupyterLab:

https://jupyterlab.readthedocs.io

JupyterLab 集成了 Jupyter Notebook、终端、Markdown、TensorBoard 等功能。

注意事项

  1. 容器中的存储是 易失 的,使用时请将数据保存在对应的存储卷中。比如算法保存在算法卷内。

    停止再启动开发环境、切换算力规格时,除了数据、算法、模型和存储卷中保存的数据,其它数据都会被清空。

  2. 可以选择任意镜像来创建开发环境,但需要提前在镜像中安装 Jupyter 才能使用 Jupyter 功能,具体参见 制作、调试自定义容器镜像

  3. 上传自定义的镜像之后,需要在 镜像管理 页面给该镜像增加“开发环境”适用范围。

目录结构

开发环境容器内的目录结构为:

/
└── workspace
    ├── algorithm(创建时选择的算法卷)
    ├── anno_dataset
    │   └── 标注数据集名字 A
    │       └── annotation(选择某个版本的标注数据时,该版本的标注文件)
    ├── dataset
    │   ├── private
    │   │   ├── 我的数据集名字 A
    │   │   └── 我的数据集名字 B
    │   └── favorite
    │       ├── 收藏数据集名字_A
    │       │   └── 收藏数据集版本名字_V1
    │       └── 收藏数据集名字_B
    │           └── 收藏数据集版本名字_V1
    ├── model
    │   ├── pretrained
    │   │   ├── 预训练模型名字 A
    │   │   └── 预训练模型名字 B
    │   ├── private
    │   │   ├── 我的模型名字 A
    │   │   └── 我的模型名字 B
    │   └── favorite
    │       ├── 收藏模型名字_A
    │       │   └── 收藏模型版本名字_V1
    │       └── 收藏模型名字_B
    │           └── 收藏模型版本名字_V1
    └── volume
        ├── 存储卷名字 A
        └── 存储卷名字 B

创建开发环境

  1. 左侧功能栏选择“开发环境”;

  2. 单击右上角“创建开发环境”;

  3. 按照页面提示配置参数:

    表 165 创建开发环境参数

    名称

    必填项

    说明

    开发环境名称

    他人访问权限

    具体参见 他人访问权限

    单节点规格

    单个节点的算力规格

    节点名称

    指定开发环境可运行的节点,不可与“驱动版本”、 “专属资源池”同时指定

    4.2 版本新增: 支持指定可运行节点

    驱动版本

    选择 MLU 或 GPU 规格时可用

    2.3 版本新增: 支持选择驱动版本。

    专属资源池

    指定开发环境运行的专属资源池

    5.0 版本新增: 支持选择专属资源池。

    IDE

    可选“VS Code”或“Jupyter”

    镜像

    镜像适用范围需包含“开发环境”

    镜像适用板卡类型需和单节点规格一致

    节点数

    使用时长

    数据

    可选“标注数据集”、“数据集”

    算法

    可选“算法卷”或“Git 仓库”

    密码

    该密码项目内成员可见,注意不要使用常用密码

    更多配置

    模型

    可选“预训练模型”、“我的模型”或“模型收藏”

    存储卷

    SSH 密钥

    可避免每次 SSH 登录需要输入密码

    创建“开发环境”过程中,用户可以在配置界面上创建、上传数据集和算法。

    1. 在创建开发环境界面创建数据集并上传数据

      • 选择“数据->我的数据集”,单击输入框;

      • 在下拉列表中,单击“创建数据集”;

      • 按照页面提示配置数据集信息;

      • 数据集创建成功后,单击右边功能按钮“上传数据集”;

      • 选择“上传文件”或“上传文件夹”;

      • 单击“上传”。

        ../../_images/create_devenv_create_dataset.png

        图 222 在创建开发环境时创建数据集

        ../../_images/create_devenv_upload_dataset.png

        图 223 在创建开发环境时上传数据集

    2. 在创建开发环境界面创建算法卷并上传算法

      操作步骤同上。

  4. 排队预测;

    在创建按钮的右边会显示是否需要排队的信息,参考 排队预测

  5. 单击“创建”。

    ../../_images/create_devenv.png

    图 224 创建开发环境

    创建时,单击右上角“目录结构”,可以预览开发环境的目录结构。

节点规格说明

节点规格是开发环境中单个节点的资源配置。

3.8 版本新增: 支持使用多个规格创建开发环境。

支持创建时选择多个规格,此时:

  1. 平台会使用每个规格分别创建容器,当其中一个规格的容器成功运行,使用其他的规格的容器会被自动删除。

    最终只有一个容器进入运行状态。

  2. 选择的多个规格在调度时是等价的,适用于期望尽快用任意一个规格来运行开发环境的场景。

  3. 预测排队时,只要其中一个规格能立即运行,就会提示该任务能立即运行。

4.0 版本新增: 支持根据所选规格查看集群可用资源

  1. 选择一个或多个规格后,单击规格列表下面的 “集群可用资源” 链接;

  2. 页面下方会弹出一个表格,展示所选规格对应的可调度节点;

  3. 信息包括节点名称,状态,OS 和内核版本,内存, CPU 信息,AI资源信息,驱动版本,适用算力规格和目前使用情况,以表格形式展示;

  4. 表格中内存,CPU 核数,AI 资源数量以分数形式展示,意义为(已经使用的资源 / 资源总量);

  5. 状态为空闲时,表示规格申请的资源小于等于节点目前可用的资源;状态为紧张时,表示规格申请的某个或某些资源大于节点目前可用的资源;

  6. 目前使用情况的条目显示格式为 1(1):application-name

    • 1: 物理卡,即板卡在节点中的位置;

    • (1): 虚拟卡,即板卡切分之后的虚拟卡序号;

    • application-name: 应用名称。

4.5 版本新增: 创建开发环境按照人工智能板卡型号筛选算力规格

  1. 选择非 CPU 类型的算力规格;

  2. 在算力规格类型下方会出现具体的人工智能板卡型号;

  3. 在板卡型号下方统计了当前所有在排队中的应用所需的各型号板卡数量;

  4. 选择一个或多个人工智能板卡型号,算力规格列表会根据所选型号过滤。

状态说明

开发环境的状态有:“创建中”、“排队中”、“运行中”、“过期”、“错误”、“停止”和“归档”。

“过期”:当开发环境运行时长超过了配置的“使用时长”,会自动变成“过期”状态; “归档”:开发环境处于“停止”或者“过期”状态的时长超过了 7 天(与环境有关,具体详询管理员)后,会自动变成“归档”状态,该状态的开发环境只支持“克隆”和“删除”操作。

查看开发环境详情

  1. 左侧功能栏选择“开发环境”;

  2. 单击开发环境“名称”,进入开发环境详情页,可查看详情、算力规格列表与当前运行使用的规格、存储卷等信息;

  3. 在开发环境详情页,单击上方“监控 ”功能,可查看 CPU、MLU/GPU、内存、网络流量等资源利用率;

  4. 在开发环境详情页,单击上方“日志”功能,可查看日志、事件信息。

登录开发环境

开发环境支持三种登录方式:

  • SSH 终端登录;

  • Jupyter 网页端登录;

  • VS Code 网页端登陆。

SSH 登录

单击开发环境名称,进入开发环境详情页,查看 SSH 登录信息。

../../_images/devenv_runtime_info.png

图 225 SSH 登录详情信息

在电脑端打开终端工具,如 Xshell、Putty、secureCRT、MobaXterm 等, 通过 ssh <user>@<hostname> -p <port> 命令登录环境。

此命令中:

<user>

是详情中显示的用户名,如上图 root

<hostname>

是详情中显示的 hostname,如上图 paas.example.com

<port>

是详情中显示的端口号,如上图 30545

密码

SSH 登录所需的密码,在详情信息是隐藏显示的,可以单击显示按钮查看并复制。

SSH 密钥 中上传 SSH 公钥并在创建开发环境时选择使用, 可避免每次登录需要输入密码。

SFTP 上传文件

SSH 支持 SFTP 的协议上传文件,可以使用 FileZilla 等支持 SFTP 的工具; 也可以直接在命令行中使用 scp 命令,如 scp -P <port> /local <user>@<hostname>:remote/

此命令中的参数同 ssh ,但注意 -P 端口参数需要在最前面,且 P 为大写,而不是 ssh 登录时使用的小写 p

Jupyter 登录

  1. 单击开发环境名称,进入开发环境详情页;

  2. 单击 IDE 中的 Jupyter 链接,进入 Jupyter 登录界面,填写登录密码(详情页密码),进入 Jupyter 开发环境;

  3. 创建 .ipynb 文件进行算法的调试,关于 Jupyter Notebook 的详细操作,请参见 https://jupyter-notebook.readthedocs.io/en/stable/notebook.html

VS Code 登陆

  1. 单击开发环境名称,进入开发环境详情页;

  2. 单击 IDE 中的 VS Code 链接,进入 VS Code 开发环境;

  3. 关于 VS Code 的详细操作,请参见 https://code.visualstudio.com/docs

VS Code 会实时监控工作目录 /workspace 下的文件变化,当工作目录中存在大量文件,或存在大量文件读写操作时, 设置合理的 glob 模式 来监听或排除工作目录下的文件,可以减少 VS Code 的内存、CPU 占用。

glob 模式配置方式如下:

  1. 网页登陆 VS Code ;

  2. 点击左下角“设置”按钮;

  3. 点击“首选项-配置”打开“设置”页面;

  4. 在“常用设置”中找到“Files: Exclude”配置项;

  5. 点击“添加模式”,输入不需要监听的文件匹配规则;

  6. 点击“确定”。

关于 glob 模式的详细内容,请参见 https://code.visualstudio.com/docs/editor/glob-patterns

多节点登录

创建多节点的开发环境时,详情页只显示第一个节点的登录信息。使用上述 SSH、IDE 网页方式登录第一个节点之后, 可以从第一个节点免密登录其他节点。

JupyterLab 可以单击 Terminal 组件进入命令行,然后使用 SSH 命令登录其他节点。

节点名称保存在开发环境的 /root/.ssh/config 文件;另外在 /etc/volcano/notebook.host/etc/volcano/worker.host 分别保存了第一个节点和剩余节点的名字。比如:

# cat /root/.ssh/config
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
Host notebook-test-1-notebook-0
  HostName notebook-test-1-notebook-0.notebook-test-1
Host notebook-test-1-worker-0
  HostName notebook-test-1-worker-0.notebook-test-1
Host notebook-test-1-worker-1
  HostName notebook-test-1-worker-1.notebook-test-1

Host 开头的每一行即为所有的节点名称。

  1. SSH 登录其他节点

    在开发环境的命令行中,输入 ssh notebook-test-1-worker-0 即可登录第二个节点。 请根据实际的开发环境名字,调整相应命令。

  2. OpenMPI 和 Horovod 访问其他节点

    分布式训练时,只需将对应节点名称填入 OpenMPI、Horovod 等分布式框架的参数中。

    比如 OpenMPI,可以使用以下命令在所有节点运行 hostname 命令(打印节点名称):

    echo localhost > /tmp/hostfile; cat /etc/volcano/worker.host >> /tmp/hostfile;
    mpirun --allow-run-as-root --hostfile /tmp/hostfile -N 1 hostname
    

    对于 horovodrun 命令,该命令需要指定每个节点的 slots 数,可使用如下方式使用 -H 参数:

    horovodrun -H localhost:1,notebook-test-1-worker-0:1 -np 2 hostname
    

    或者使用 hostfile 文件,对应参数为 -hostfile ,格式为:

    localhost slots=1
    notebook-test-1-worker-0 slots=1
    
  3. MPICH

    MPICH 使用的 hostfile 格式和 OpenMPI 不同,如果要指定每个节点的 slots 数,可以使用如下格式:

    localhost:2
    notebook-test-1-worker-0:2
    

    由于平台的技术限制,使用 MPICH 时需要使用 -localhost 参数指定 Launcher 节点的地址。如:

    mpirun -f /tmp/hostfile -localhost $(cat /etc/volcano/notebook.host) hostname
    

搜索开发环境

  1. 左侧功能栏选择“开发环境”;

  2. 单击左上角搜索框;

  3. 在下拉列表中,基于“名称”、“状态”、“创建人”、“我的算法卷”、“算法收藏”、“数据集收藏”、“我的数据集”和“算力规格”搜索开发环境。

    ../../_images/search_devenv.png

    图 226 搜索开发环境

停止开发环境

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要停止的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“停止”;

  4. 单击“确认停止”。

启动开发环境

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要启动的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“启动”;

  4. 重新选择“规格”、“计算节点数量”、“使用时长”;

  5. 单击“确认选择”。

克隆开发环境

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要克隆的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“克隆”;

  4. 调整配置;

  5. 单击“创建”。

切换规格

用户可以切换“运行中”的开发环境的算力规格。切换规格会 重置 容器,请注意保存数据。

操作步骤:

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要切换规格的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“切换规格”;

  4. 选择新规格、新的节点数;

  5. 单击“确认切换”。

    ../../_images/change_devenv_flavor.png

    图 227 切换开发环境规格

调整使用时长

用户可以调整“运行中”的开发环境的使用时长,该操作不会重置容器。

操作步骤:

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要调整使用时长的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“调整使用时长”;

  4. 选择“使用时长” 或输入自定义时长;

  5. 单击“确认调整”。

    ../../_images/change_devenv_duration.png

    图 228 调整开发环境使用时长

调整优先级

用户可以调整“排队中”的开发环境的优先级。

操作步骤:

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要调整优先级的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“调整优先级”;

  4. 选择“正常”或“非常紧急”;

  5. 单击“确认调整”。

    ../../_images/change_devenv_priority.png

    图 229 调整开发环境优先级

根据过期时间排序

状态为“运行中”的开发环境将在列表页显示过期时间,该时间由开始运行的时间加上使用时长得到,若不限使用时长,“过期时间”栏将显示“不限”。 超过过期时间后开发环境将停止运行,状态变成为“过期”。非“运行中”的开发环境的过期时间栏将显示“–”。

  1. 左侧功能栏选择“开发环境”;

  2. 点击名称为“过期时间”的表头;

  3. 在列表页中,开发环境将通过过期时间排序;

保存镜像

用户可以将“运行中”的开发环境保存成镜像,操作步骤:

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要保存成镜像的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“保存镜像”;

  4. 编辑“镜像名称”、“Tag”和“适用范围”;

  5. 单击“确认”。

    ../../_images/save_devenv_image.png

    图 230 保存开发环境镜像

勾选“配置为当前开发环境的镜像”表示,停止再启动、调整算力规格之类操作在重新启动开发环境时, 会使用保存之后的镜像。

创建任务式训练

4.5 版本新增: 从开发环境创建任务式训练

  1. 左侧功能栏选择“开发环境”;

  2. 选择需要基于的开发环境,单击该环境的“操作”按钮;

  3. 在下拉列表中,单击“创建任务式训练”;

  4. 跳转到任务式训练创建页,会根据开发环境的配置信息自动填写好各项配置;

  5. 按需修改配置信息;

  6. 单击“创建”。

删除开发环境

  1. 左侧功能栏选择“开发环境”;

  2. 单个删除:选择需要删除的开发环境,单击该环境的“操作”按钮,在下拉列表中,单击“删除”;

  3. 批量删除:单击表格右上角“编辑”按钮,勾选多个需要删除的开发环境,单击表格右上角“删除”按钮;

  4. 单击“确认删除”。

他人访问权限

4.1 版本新增: 支持为开发环境配置他人访问权限。

创建时,可以限制同项目内其他用户的访问权限,包括:“可读写”、“只读”和“不可读写”。 应用访问权限不得高于资源访问权限。 若管理员关闭共享权限,则他人访问权限只能为“不可读写”。

不同权限支持的操作如下:

表 166 他人支持的操作

可读写

只读

不可读写

查看详情

X

启动

X

X

停止

X

X

切换算力规格

X

X

保存镜像

X

X

调整使用时长

X

X

查看密码

X

X

删除

X

X

通过 VS Code 访问 Web 服务

登录 VS Code 后,在 VS Code 容器中启动任何的 Web 服务,VS Code 都会自动代理(Auto Port Forwarded),可以在远程直接访问 /proxy/<port>/。

例如在 VS Code Terminal 直接运行 python http 服务

python3 -m http.server 8080

在当前浏览器中访问

复制地址 http://{paas.domain}/apps/notebook/{id}/vscode/proxy/8080/ 到当前浏览器直接访问 python 服务

../../_images/dev_environ_vscode_port_forwarded.png

图 231 VS Code Port Forwarded

在代码中访问

需要先登录保存 cookies,下面以 curl 举例。

curl -c cookies.txt -d "password={your_password}"  http://{paas.domain}/apps/notebook/{id}/vscode/login
Found. Redirecting to ./%

curl -b cookies.txt http://{paas.domain}/apps/notebook/{id}/vscode/proxy/8080/"

访问 Web UI