Pycharm 使用 docker 和 GPU 进行调试
Pycharm debugging using docker with GPUs
目标:
为了在 PyCharm 中调试 Python 应用程序,我将解释器设置为自定义 docker 图像,使用 Tensorflow,因此需要 GPU。据我所知,问题是 PyCharm 的 命令构建 没有提供发现可用 GPU 的方法。
终端 - 有效:
使用以下命令输入容器,指定要提供的 GPU (--gpus
):
docker run -it --rm --gpus=all --entrypoint="/bin/bash" 3b6d609a5189 # image has an entrypoint, so I overwrite it
在容器内,我可以 运行 nvidia-smi
查看是否找到了 GPU,并确认 Tensorflow 找到了它,使用:
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
# physical_device_desc: "device: 0, name: Quadro P2000, pci bus id: 0000:01:00.0, compute capability: 6.1"]
如果我不使用 --gpus
标志,则不会像预期的那样发现任何 GPU。
注意:使用 docker 版本 19.03 及更高版本,Nvidia 运行 次是本机支持的,因此不需要 nvidia-docker
以及 docker-运行参数 --runtime=nvidia
也已弃用。 Relevant thread.
PyCharm - 它不起作用
这是 运行 的配置:
(我意识到其中一些路径可能看起来不正确,但目前这不是问题)
我将解释器设置为指向相同的 docker 图像和 运行 Python 脚本,将自定义 LD_LIBRARY_PATH
设置为 [=116] 的参数=] 匹配 libcuda.so
在 docker 图像中 locate
d 的位置(我在 运行ning 容器中以交互方式找到它),但仍然没有找到设备:
错误消息显示可以加载 CUDA 库(即在 LD_LIBRARY_PATH
上找到),但仍未找到设备。这就是为什么我认为必须在某处设置 docker 运行 参数 --gpus=all
的原因。我在 PyCharm.
中找不到这样做的方法
我尝试过的其他事情:
- 在 PyCharm 中,使用 Docker 执行模板配置(而不是 Python 模板),其中可以指定 运行 参数,所以我希望通过
--gpus=all
,但那些选项的解析器似乎不支持:
- 我试图通过在
/etc/docker/daemon.json
中包含以下配置,将 docker 守护程序中的默认 运行 时间设置为 nvidia
:
{
"runtimes": {
"nvidia": {
"runtimeArgs": ["gpus=all"]
}
}
}
不过,我不确定此格式是否正确。我已经尝试了上述的几个变体,但没有任何一个可以识别 GPU。上面的示例至少可以被解析并允许我重新启动 docker 守护程序而不会出错。
我在官方 Tensorflow docker 图像中注意到,他们安装了一个名为 nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0
的包(通过 apt install
),这听起来是个很棒的工具,尽管似乎只适用于 TensorRT。我将它添加到我的 Docker 文件中作为在黑暗中拍摄的照片,但不幸的是它没有解决问题。
在PyCharm配置的环境变量中添加NVIDIA_VISIBLE_DEVICES=all
等,没有成功。
我正在使用 Python 3.6、PyCharm Professional 2019.3 和 Docker 19.03。
原来 attempt 2. 在我 post 的 "Other things I tried" 部分是正确的方向,并且使用以下允许 PyCharm 的远程解释器(docker 图像)定位 GPU,就像终端能够做到的那样。
我在 /etc/docker/daemon.json
中添加了以下内容:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
保存文件后还需要重启docker服务:
sudo service docker restart
注意:这会杀死系统上的所有 运行 docker 容器
Docker GPU 支持现已在 PyCharm 2020.2 中可用,没有全局 default-runtime
。
只需在 configuration window.
的 'Docker container settings' 部分下设置 --gpus all
如果 no NVIDIA GPU device is present: /dev/nvidia0 does not exist
错误仍然出现,请确保取消选中 Run with Python Console
,因为它仍然无法正常工作。
查看 Michał De 的回答,它有效。但是,交互式控制台仍然损坏。对于一些 docker inspect
,我发现使用选项 Run with Python Console
会覆盖 docker 配置,忽略提供的选项 --gpus all
。我无法忍受这样的生活质量损失,并强迫 pycharm 使用 docker-compose
.
玩得很好
看哪,解决方法。
1.如何在 Tensorflow
中测试 GPU
import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))
应该return像
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
2。确保你有一个简单的 docker 容器可以工作
docker pull tensorflow/tensorflow:latest-gpu-jupyter
docker run --gpus all -it tensorflow/tensorflow:latest-gpu-jupyter python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
最后一张打印件应如步骤 1 中所述。否则请参阅 nvidia guide or tensorflow guide。
3。创建一个 compose 文件并测试它
version: '3'
# ^ fixes another pycharm bug
services:
test:
image: tensorflow/tensorflow:latest-gpu-jupyter
# ^ or your own
command: python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
# ^ irrelevant, will be overwridden by pycharm, but usefull for testing
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
docker-compose --file your_compose_file up
同样,您应该会看到与步骤 1 中所述相同的输出。鉴于步骤 2 已成功,这应该不会令人感到意外。
4。在 pycharm
中将此 compose 设置为解释器
- 配置文件:your_compose_file
- 服务:测试(它只是工作,但你可以有更多 fun )
5.在 运行 启用 GPU docker.
的同时享受您的交互式控制台
目标:
为了在 PyCharm 中调试 Python 应用程序,我将解释器设置为自定义 docker 图像,使用 Tensorflow,因此需要 GPU。据我所知,问题是 PyCharm 的 命令构建 没有提供发现可用 GPU 的方法。
终端 - 有效:
使用以下命令输入容器,指定要提供的 GPU (--gpus
):
docker run -it --rm --gpus=all --entrypoint="/bin/bash" 3b6d609a5189 # image has an entrypoint, so I overwrite it
在容器内,我可以 运行 nvidia-smi
查看是否找到了 GPU,并确认 Tensorflow 找到了它,使用:
from tensorflow.python.client import device_lib
device_lib.list_local_devices()
# physical_device_desc: "device: 0, name: Quadro P2000, pci bus id: 0000:01:00.0, compute capability: 6.1"]
如果我不使用 --gpus
标志,则不会像预期的那样发现任何 GPU。
注意:使用 docker 版本 19.03 及更高版本,Nvidia 运行 次是本机支持的,因此不需要 nvidia-docker
以及 docker-运行参数 --runtime=nvidia
也已弃用。 Relevant thread.
PyCharm - 它不起作用
这是 运行 的配置:
(我意识到其中一些路径可能看起来不正确,但目前这不是问题)
我将解释器设置为指向相同的 docker 图像和 运行 Python 脚本,将自定义 LD_LIBRARY_PATH
设置为 [=116] 的参数=] 匹配 libcuda.so
在 docker 图像中 locate
d 的位置(我在 运行ning 容器中以交互方式找到它),但仍然没有找到设备:
错误消息显示可以加载 CUDA 库(即在 LD_LIBRARY_PATH
上找到),但仍未找到设备。这就是为什么我认为必须在某处设置 docker 运行 参数 --gpus=all
的原因。我在 PyCharm.
我尝试过的其他事情:
- 在 PyCharm 中,使用 Docker 执行模板配置(而不是 Python 模板),其中可以指定 运行 参数,所以我希望通过
--gpus=all
,但那些选项的解析器似乎不支持:
- 我试图通过在
/etc/docker/daemon.json
中包含以下配置,将 docker 守护程序中的默认 运行 时间设置为nvidia
:
{ "runtimes": { "nvidia": { "runtimeArgs": ["gpus=all"] } } }
不过,我不确定此格式是否正确。我已经尝试了上述的几个变体,但没有任何一个可以识别 GPU。上面的示例至少可以被解析并允许我重新启动 docker 守护程序而不会出错。
我在官方 Tensorflow docker 图像中注意到,他们安装了一个名为
nvinfer-runtime-trt-repo-ubuntu1804-5.0.2-ga-cuda10.0
的包(通过apt install
),这听起来是个很棒的工具,尽管似乎只适用于 TensorRT。我将它添加到我的 Docker 文件中作为在黑暗中拍摄的照片,但不幸的是它没有解决问题。在PyCharm配置的环境变量中添加
NVIDIA_VISIBLE_DEVICES=all
等,没有成功。
我正在使用 Python 3.6、PyCharm Professional 2019.3 和 Docker 19.03。
原来 attempt 2. 在我 post 的 "Other things I tried" 部分是正确的方向,并且使用以下允许 PyCharm 的远程解释器(docker 图像)定位 GPU,就像终端能够做到的那样。
我在 /etc/docker/daemon.json
中添加了以下内容:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
保存文件后还需要重启docker服务:
sudo service docker restart
注意:这会杀死系统上的所有 运行 docker 容器
Docker GPU 支持现已在 PyCharm 2020.2 中可用,没有全局 default-runtime
。
只需在 configuration window.
--gpus all
如果 no NVIDIA GPU device is present: /dev/nvidia0 does not exist
错误仍然出现,请确保取消选中 Run with Python Console
,因为它仍然无法正常工作。
查看 Michał De 的回答,它有效。但是,交互式控制台仍然损坏。对于一些 docker inspect
,我发现使用选项 Run with Python Console
会覆盖 docker 配置,忽略提供的选项 --gpus all
。我无法忍受这样的生活质量损失,并强迫 pycharm 使用 docker-compose
.
看哪,解决方法。
1.如何在 Tensorflow
中测试 GPUimport tensorflow as tf; print(tf.config.list_physical_devices('GPU'))
应该return像
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
2。确保你有一个简单的 docker 容器可以工作
docker pull tensorflow/tensorflow:latest-gpu-jupyter
docker run --gpus all -it tensorflow/tensorflow:latest-gpu-jupyter python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
最后一张打印件应如步骤 1 中所述。否则请参阅 nvidia guide or tensorflow guide。
3。创建一个 compose 文件并测试它
version: '3'
# ^ fixes another pycharm bug
services:
test:
image: tensorflow/tensorflow:latest-gpu-jupyter
# ^ or your own
command: python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
# ^ irrelevant, will be overwridden by pycharm, but usefull for testing
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
docker-compose --file your_compose_file up
同样,您应该会看到与步骤 1 中所述相同的输出。鉴于步骤 2 已成功,这应该不会令人感到意外。
4。在 pycharm
中将此 compose 设置为解释器- 配置文件:your_compose_file
- 服务:测试(它只是工作,但你可以有更多 fun )
5.在 运行 启用 GPU docker.
的同时享受您的交互式控制台