分布式训练的IO问题(2)

pytorch本地编译

1.基本流程

#installing pytorch
cd $HOME
#git clone --recursive https://github.com/pytorch/pytorch
git clone git@
cd $HOME/pytorch
git checkout tags/v1.7.0
#git clean -xdf
#python setup.py clean
git submodule sync
#git submodule deinit -f .
git submodule update --init --recursive
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py install

第一部分基本上是下载并运行,这里一定要和github建立ssh链接并用ssh方式进行克隆。

2.CUDA 和 GCC 的关系

2.1. CUDA 和 GCC 的关系
  • CUDA: 是 NVIDIA 提供的并行计算平台和编程模型,用于利用 NVIDIA GPU 进行高性能计算。CUDA 程序通常以 .cu 文件格式编写。

  • GCC (GNU Compiler Collection): 是一个编译器集合,主要用于编译 C、C++ 和其他语言的源代码。在 CUDA 中,GCC 被用作编译 CUDA 代码的主机代码部分。

2.2. 谁在谁之上

在编译 CUDA 程序时,CUDA 编译器(nvcc)负责将 .cu 文件编译成可执行文件。nvcc 会调用 GCC 来编译主机代码部分。因此,可以认为:

  • nvccGCC 之上,负责整个编译过程。
  • GCC 用于编译 CUDA 程序中的主机代码。
2.3. .cu 文件需要的 GCC 版本

CUDA 对 GCC 的版本有一定的要求。通常,CUDA Toolkit 的文档会列出兼容的 GCC 版本。以下是一些常见的规则:

  • CUDA 10.x: 通常兼容 GCC 5.x 和 7.x,但不支持 GCC 9.x 及以上版本。
  • CUDA 11.x: 通常支持 GCC 7.x 和 9.x。
  • CUDA 12.x: 可能支持更高版本的 GCC,如 9.x 和 10.x。

总结

  • 在编译 CUDA 程序时,使用 nvcc 来处理 .cu 文件,并调用适当版本的 GCC 编译主机代码。
  • 确保使用与您 CUDA Toolkit 版本兼容的 GCC 版本,以避免编译错误。

如果需要特定版本的兼容性信息,可以查看 NVIDIA 的 CUDA Toolkit 文档.

3. gcc版本

这次我们需要对gcc进行降级
gcc多版本安装与切换
在这里插入图片描述

gcc11的问题
gcc9的问题
gcc6的安装

4. 网络失败的报错

ERROR: Cannot unpack file /tmp/pip-unpack-uxmnsi4z/simple (downloaded from /tmp/pip-req-build-wgarvgpm, content-type: text/html;charset=UTF-8); cannot detect archive format ERROR: Cannot determine archive format of /tmp/pip-req-build-wgarvgpm Looking: command not found

直接重新下载就可以

5. 如何查看gpu利用率

# 每秒刷新一次
nvidia-smi -l 1

在这里插入图片描述

在这里插入图片描述

6.device参数。

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

这两种表述的区别在于,to(device)操作是复制到所有的GPU还是只赋值到一个GPU上。
我们采取上面的写法,否则会报错。
数据并行很简单,核心就是一行,model=nn.DataParallel(model)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model=get_model()
model = nn.DataParallel(model)
model=model.to(device)

7.git 忽视,错误添加如何回退

没有commit之前,但是已经add了,这些文件如何去除

git rm -r --cached . 
git add .

8.Tensor board

8.1 安装
pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple/
8.2 图片和模型graph
#展示图片
writer = SummaryWriter('runs/vit_dp_8layer_001')
# get some random training images
trainloader=loaders['train']
dataiter = iter(trainloader)
images, labels = next(dataiter)
# create grid of images
img_grid = torchvision.utils.make_grid(images)
# write to tensorboard
writer.add_image('four_fashion_mnist_images', img_grid)

报了一个ANTIALIAS的错误,重装pillow为较低的版本就可以解决。
在这里插入图片描述
在这里插入图片描述
这个是效果图,是一个batch,且归一化之后的结果,我也看不出是啥,关键是我们会用了。

model=get_model()
model_print=model.to("cuda:0")
writer.add_graph(model_print,images.to("cuda:0"))
model = nn.DataParallel(model)
model=model.to(device)

graph值得一提的是DP之后的模型是不可直接add_graph的,我们智能制造一个没有并行的副本model_print

8.3 loss

回到主线,数据的可视化
如果出现这个报错

TypeError: MessageToJson() got an unexpec
ted keyword argument 'including_default_value_fields'

那么需要用这个指令降级protobuf来和tensorboard适配(我的tensorboard 2.14.0)

 pip install protobuf==3.20.0 -i https://mirrors.huaweicloud.com/repository/pypi/simple --root-user-action=ignore

统计每10步的平均值,且每10步一输出。

  optimizer.zero_grad()
  loss.backward()
  optimizer.step()
  running_loss += loss.item()
  step=step+1
  if step % 10 == 0:    # every 10 mini-batches..
                # ...log the running loss
      writer.add_scalar('training loss', running_loss / 10,step)
      #print( running_loss / 10, step)
      running_loss=0

在这里插入图片描述
在这里插入图片描述

10 redis 安装

回到主线,现在需要安装redis
redis install
在这里插入图片描述
redis有兼容性,直接 sudoapt install redis-server就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值