30系列显卡使用Pytorch1 60及Docker下的GUI程序可视化

30系列显卡使用Pytorch1.60及Docker下的GUI程序可视化


背景

由于项目要求,需要训练并运行一个基于Pytorch1.6的抓取框架。本机实际安装的显卡为3060相关配置如下。

nvidia-smi
Thu Sep 22 10:49:23 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01    Driver Version: 515.65.01    CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
| N/A   56C    P8    16W /  N/A |   1063MiB /  6144MiB |     11%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

首先尝试使用conda进行虚拟环境的配置,但配置时发现,pytorch1.6对应的官方binaries CUDA版本为10.2,本机使用显卡3060,最低支持版本为cuda11.0。该问题导致pytorch无法获得并使用显卡进行运算,在python会话中进行测试会得到如下错误信息:

python
Python 3.8.13 (default, Mar 28 2022, 11:38:47) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'python'
>>> import torch as tc
>>> tc.cuda.get_device_name()
/home/xxxxxxx/miniconda3/envs/grasp/lib/python3.8/site-packages/torch/cuda/__init__.py:125: UserWarning: 
NVIDIA GeForce RTX 3060 Laptop GPU with CUDA capability sm_86 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70 sm_75.
If you want to use the NVIDIA GeForce RTX 3060 Laptop GPU GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/

  warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name))
'NVIDIA GeForce RTX 3060 Laptop GPU'
#查看torch对应的cuda版本
>>> tc.version.cuda
'10.2'

也就是说,不管是pip还是conda中原生的pytorch1.6无法直接在30系列显卡上使用,于是开始寻找解决办法。


解决方案

方案一

参考https://discuss.pytorch.org/t/pytorch-with-cuda-11-compatibility/89254中给出的解释,py1.6官方binary没有集成对11.0的支持,但相关源码的PR中已经合并了对cuda11.0支持的部分,所以直接从源码编译即可。该方法理论上可以直接解决问题但我嫌有点麻烦就没试,准备实在找不到别的方法再这么搞。

方案二

参考https://blog.csdn.net/huitailangyz/article/details/124308319

使用nvidia官方优化过的nvidia-docker对应的深度学习框架镜像。根据https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html该官方文档查看复合需求的docker image版本。查看到对应11.0和pytorch1.6的支持版本是20.06,该网站大部分镜像都已经支持安培架构的显卡(30系列),而且结合docker的形式也方便在不同机器上进行部署。

适用如下命令拉去对应版本的docker image(先装docker,网上教程一大把),

docker pull nvcr.io/nvidia/pytorch:20.06-py3

此时电脑里就有这个image了,使用如下命令打开docker即可,并测试其pytorch版本。

docker images # 查看镜像ID
docker run -it --gpus all --name ${CONTAINER NAME} -v 本地文件路径1:镜像中的文件路径1 -v 本地文件路径2:镜像中的文件路径2 --network host ${IMAGE ID} /bin/bash
# 其中${CONTAINER NAME} 容器名字
# -v 表示需要挂载的文件/文件夹

# 启动后会有如下警告,不影响,实际可以用
WARNING: Detected NVIDIA NVIDIA GeForce RTX 3060 Laptop GPU GPU, which is not yet supported in this version of the container
ERROR: No supported GPU(s) detected to run this container

NOTE: MOFED driver for multi-node communication was not detected.
      Multi-node communication performance may be reduced.

# 在docker bash中进入python并验证pytorch
root@xxxxxxx-Alienware-x14:/workspace# python
Python 3.6.10 |Anaconda, Inc.| (default, Mar 23 2020, 23:13:11) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch as tc
>>> tc.__version__
'1.6.0a0+9907a3e'
>>> tc.cuda.get_device_name()
'NVIDIA GeForce RTX 3060 Laptop GPU'
>>> tc.version.cuda
'11.0'

可以看到该容器内的pytorch版本为定制过后的1.6版本,对应的cuda为11.0,且能正常识别到显卡和食用显卡,没有先前的报错,此时配置完成。按照正常linux流程在容器内运行相应代码即可。


Docker容器内GUI程序的外部显示

代码中有open3d的可视化内容,正常运行情况下容器内可以不跑带gui的程序,但调试的时候还是得有相应的可视化来方便调试。查了一万种方法,网上说的方法都试了,全都失败了。但突然在组合了几种解决方案后就可以了,至于为啥么。。算了能用就行。(老狗の印)

docker image配置完成后在运行docker时进行如下的参数配置(附带一部分解释)

docker run -it \
	--rm \
	# 进行一些显示相关的设置,宿主机显示器DISPLAY环境变量为1
	--env="NVIDIA_DRIVER_CAPABILITIES=all" \       
	--env="DISPLAY=$DISPLAY" \
	--env="QT_X11_NO_MITSHM=1" \
	--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
	# 使用(所有)gpu
	--gpus all \
	# container 获得root权限,读取接口文件系统
	--privileged \
	# 设置网络配置(这个得要,跟Xserver映射有关)
	--network host \
	# 启动的 container 名字
	--name grasp \
	# 和宿主共享内存
	--ipc host \
	# 一些显示GUI效果的变量,感觉没啥用不加也可以
	-e GDK_SCALE \
	-e GDK_DPI_SCALE \
	# 镜像名字
	graspnet:v1.0 \
	# 开个bash
	/bin/bash

这时候打开的docker应该就可以吧GUI的进程显示到宿主机上了,测试打开rviz(正常ros怎么装就在容器里怎么装,装完记得更新镜像)可以正常显示,即成功了。在这里插入图片描述

后续就可以方便在该环境进行调试运行等工作,同时该Docker环境也可以比较方便的部署到其他30系列显卡的机器上训练。(拿3060训练不是在搞自己?)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用PyTorch可视化TensorBoard的步骤如下: 1. 安装TensorBoard ``` pip install tensorboard ``` 2. 在PyTorch中创建SummaryWriter对象 ```python from torch.utils.tensorboard import SummaryWriter # 创建SummaryWriter对象 writer = SummaryWriter('runs/experiment_name') ``` 其中,`experiment_name`为实验名称,可以自定义。这里通过`runs`目录来存储实验数据。 3. 在训练或验证的过程中添加可视化代码 在代码中使用`writer.add_scalar()`方法来添加可视化代码,方法的参数包括要可视化的变量名、变量值和步数。例如: ```python # 添加训练损失 writer.add_scalar('Train/Loss', loss.item(), step) # 添加验证准确率 writer.add_scalar('Validation/Accuracy', accuracy, step) ``` 4. 启动TensorBoard 在命令行中使用以下命令启动TensorBoard: ``` tensorboard --logdir runs ``` 其中,`--logdir`参数指定实验数据所在的目录。在上面的代码中,我们将实验数据保存在`runs`目录下。 5. 在浏览器中查看可视化结果 在浏览器中输入以下地址查看TensorBoard可视化结果: ``` http://localhost:6006/ ``` 这里是一个可视化变量曲线的代码示例: ```python import torch from torch.utils.tensorboard import SummaryWriter # 创建SummaryWriter对象 writer = SummaryWriter('runs/experiment_name') # 创建模拟数据 x = torch.linspace(-5, 5, 100) y = torch.sin(x) # 可视化曲线 for i in range(100): writer.add_scalar('Sin(x)', y[i], i) # 关闭SummaryWriter对象 writer.close() ``` 这段代码将生成一条正弦曲线,并将其可视化在TensorBoard中。在TensorBoard中,我们可以选择`Scalars`选项卡来查看变量曲线。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值