当前位置:   article > 正文

华为昇腾服务器npu中安装paddle,pytorch等环境,训练代码迁移适配等问题记录_pytorch npu版

pytorch npu版
1.编译安装paddle

参考文档:https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/npu/README_cn.md

2.安装pytorch
  1. pip install torch==2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
  2. pip install pyyaml setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple
  3. pip install torch-npu==2.1.0rc1 -i https://pypi.tuna.tsinghua.edu.cn/simple
3.训练代码torch迁移到torch_npu

官方参考文档:昇腾社区-官网丨昇腾万里 让智能无所不及

(1)配置环境变量
export PYTHONPATH={CANN包安装目录}/ascend-toolkit/latest/tools/ms_fmk_transplt/torch_npu_bridge:$PYTHONPATH
 (2)在训练脚本中导入以下库代码
  1. import torch
  2. import torch_npu
  3. .....
  4. import transfer_to_npu # 报错的话改写为from torch_npu.contrib import transfer_to_npu
(3)指定使用npu进行训练
torch_npu.npu.set_device("npu:3") 
4.可能会出现的报错问题:
(1)缺少openGL会报错

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

解决方法:

yum install mesa-libGL.aarch64
(2)报错ModuleNotFoundError: No module named 'transfer to npu!

解决方法:改为下面的import方式:

from torch_npu.contrib import transfer_to_npu
 (3)报错libgomp-d22c30c5.so.1.0.0:cannot allocate memory in static TLS block

解决方法:

TLS的全称是:Thread Local Storage。同一个进程中的所有线程共享同一个地址空间,进程中定义的全局变量和静态变量能够被所有线程访问。但多个线程同时访问一个数据的时候,容易产生冲突。针对这一问题,TLS机制可以将数据和特定线程联系起来,TLS在各线程中有独立的数据存储空间,声明的TLS变量在每个线程中都有一个副本。这样,多线程可以做到对数据的同时访问而不互相影响。

libgomp这个问题是Arm平台arrch64位操作系统上的一个bug,目前绝大部分推荐的解决方法都是,将libgomp所在的路径通过LD_PRELOAD设置预加载,添加到环境变量中。

方法是下面的添加环境变量。

export LD_PRELOAD=/root/software/enter/envs/py39/lib/python3.9/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0:$LD_PRELOAD

前提需要找到该文件的位置,可以用find命令找到文件位置,然后用上面的export。

  1. find / -name libgomp-d22c30c5.so.1.0.0
  2. /root/software/enter/envs/py39/lib/python3.9/site-packages/scikit_learn.libs/libgomp-d22c30c5.so.1.0.0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/914688
推荐阅读
相关标签
  

闽ICP备14008679号