VS Code 和 Pycharm DevContainer 使用

训练和推理都需要 GPU 服务器,但是本地环境没有,借助 Dev Containers 可以在容器中进行开发和调试。Dev Containers 的使用步骤为:

  • 和 GPU 服务器建立 SSH 连接
  • 将代码克隆至 GPU 服务器的某个目录上
  • 使用 VS Code 或 Pycharm 等使用 Dev Container 进行开发

VS Code

添加 SSH

17496227293081749622728771.png

连接到服务器

17496228319801749622831325.png

连接过程中可能要输入服务器密码

使用 Dev Container

切换到项目路径下,这里演示路径为 /data/ultraalgorithm

17496230819801749623081279.png

切换到项目路径后,VS Code 会自动识别(右下角),或者可以输入命令> dev containers reopen in containers 进入到 Dev Container

这样即可在容器中进行开发,且变更后的代码会同步到服务器 /data/ultraalgorithm 项目路径下

Pycharm

添加 SSH

17496235319821749623531126.png

17496236419871749623641675.png

新建 Dev Container

17496252929801749625292785.png

使用 Dev Container

Pycharm 下,使用 Dev Container 需要 Java 17+ 环境,可以使用以下命令安装

1
sudo apt install -y openjdk-17-jdk

17496238989811749623898793.png

Dev Container 配置

在项目根目录 .devcontainer 下,有一个名为 devcontainer.json 的配置文件(没有也可以手动新建),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{
// 显示的名称
"name": "UltraAlgorithm-DevContainer",
// 调试不同算法时,请修改镜像!!!
"image": "ultraalgorithm-detect:v1.0.0",
"runArgs": ["--gpus=all"], // 挂载 GPU
"mounts": [
// 挂载源代码
{
"source": "/data/ultraalgorithm",
"target": "/app/ultraalgorithm",
"type": "bind"
},
// 挂载其他数据
{
"source": "/opt/task-def",
"target": "/opt/",
"type": "bind"
},
{
"source": "/opt/datasets",
"target": "/datasets",
"type": "bind"
},
{
"source": "/opt/datasets-nfs",
"target": "/datasets-nfs",
"type": "bind"
}
],
// 推理时的端口映射
"forwardPorts": [9000],
"customizations": {
"vscode": {
// 默认 vscode 安装的插件
"extensions": [
"ms-python.python",
"davidanson.vscode-markdownlint",
"python.test-unittest",
"python.test-pytest"
],
"settings": {
"editor.fontSize": 16,
// python 解释器路径(根据容器来设置)
"python.interpreterPath": "/usr/bin/python3.10",
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": false
}
}
}
}

VS Code 的 Dev Container 体验比 Pycharm 更好,速度更快!

VS Code 和 Pycharm 都需要安装 Dev Container 插件

如果没有 GPU 的需求,那么不必 SSH 到服务器上,本地启动 Dev Container 也可以,这样相当于容器在本地启动。