pythontorchloaddllpath打包报错

pythontorchloaddllpath打包报错,第1张

题主是否想询问“pythontorchloaddllpath打包报错的解决方案”。以下是一些可能的解决方案。

1、将PyTorch打包进EXE文件:可以使用PyInstaller等打包工具将PyTorch和程序一起打包成一个EXE文件,这样可以保证所有的库都能被正确地加载和使用。

2、手动复制DLL文件:将PyTorch包中的所有DLL文件手动复制到程序所在的文件夹下,这样可以保证程序在运行时能够找到所有需要的库文件。

3、添加环境变量:将PyTorch包中的DLL文件所在的路径添加到系统的PATH环境变量中,这样在运行程序时系统就能够正确地找到需要的库文件。

4、升级PyTorch版本:有时候,这个问题可能是由于PyTorch版本不兼容或者存在一些已知的问题所导致的。尝试升级到最新版本的PyTorch,或者尝试使用一些已知稳定的版本,可能会解决这个问题。

Windows Torch找不到指定的程序Torchlib可能是由于Torchlib不在Windows Torch的安装路径中,或者是因为Torchlib没有正确安装,或者是因为Torchlib与Windows Torch的版本不兼容。另一种可能是由于Torchlib被损坏或者被病毒感染而无法正常运行,或者是由于Windows Torch被损坏或者被病毒感染而无法正常运行。最后,还有可能是由于Windows Torch的设置不正确或者未正确配置而导致Torchlib无法正常运行。

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。

由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:具有强大的GPU加速的张量计算(如NumPy)。包含自动求导系统的深度神经网络

发展:

PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络。

PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用。

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。

2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:

1、具有强大的GPU加速的张量计算(如NumPy);

2、包含自动求导系统的深度神经网络。

优点

1、PyTorch是相当简洁且高效快速的框架;

2、设计追求最少的封装;

3、设计符合人类思维,它让用户尽可能地专注于实现自己的想法;

4、与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新;

5、PyTorch作者亲自维护的论坛供用户交流和求教问题;

6、入门简单。

扩展资料:

模块

1、Autograd模块

PyTorch使用一种称为自动微分的方法。记录器记录已执行的 *** 作,然后向后重播以计算梯度。当构建神经网络以通过计算前向传递参数的微分来节省一个时间时,此方法特别强大。

2、Optim模块

torchoptim是实现用于构建神经网络的各种优化算法的模块。大多数常用方法已受支持,因此无需从头开始构建它们。

3、nn模块

PyTorchautograd使定义计算图和获取梯度变得容易,但是原始的autograd对于定义复杂的神经网络而言可能太低了。这是nn模块可以提供帮助的地方。

1 利用CUDA_VISIBLE_DEVICES设置可用显卡

在CUDA中设定可用显卡,一般有2种方式:

(1) 在代码中直接指定

import os

osenviron['CUDA_VISIBLE_DEVICES'] = gpu_ids

(2) 在命令行中执行代码时指定

CUDA_VISIBLE_DEVICES=gpu_ids python3 trainpy

如果使用sh脚本文件运行代码,则有3种方式可以设置

(3) 在命令行中执行脚本文件时指定:

CUDA_VISIBLE_DEVICES=gpu_ids sh runsh

(4) 在sh脚本中指定:

source bashrc

export CUDA_VISIBLE_DEVICES=gpu_ids && python3 trainpy

(5) 在sh脚本中指定

source bashrc

CUDA_VISIBLE_DEVICES=gpu_ids python3 trainpy

如果同时使用多个设定可用显卡的指令,比如

source bashrc

export CUDA_VISIBLE_DEVICES=gpu_id1 && CUDA_VISIBLE_DEVICES=gpu_id2 python3 trainpy

那么高优先级的指令会覆盖第优先级的指令使其失效。优先级顺序为:不使用sh脚本 (1)>(2); 使用sh脚本(1)>(5)>(4)>(3)

个人感觉在炼丹时建议大家从(2)(3)(4)(5)中选择一个指定可用显卡,不要重复指定以防造成代码的混乱。方法(1)虽然优先级最高,但是需要修改源代码,所以不建议使用。

2 cuda()方法和torchcudaset_device()

我们还可以使用cuda()[包括modelcuda()/losscuda()/tensorcuda()]方法和torchcudaset_device()来把模型和数据加载到对应的gpu上。

(1) cuda()

以modelcuda()为例,加载方法为:

modelcuda(gpu_id) # gpu_id为int类型变量,只能指定一张显卡

modelcuda('cuda:'+str(gpu_ids)) #输入参数为str类型,可指定多张显卡

modelcuda('cuda:1,2') #指定多张显卡的一个示例

(2) torchcudaset_device()

使用torchcudaset_device()可以更方便地将模型和数据加载到对应GPU上, 直接定义模型之前加入一行代码即可

torchcudaset_device(gpu_id) #单卡

torchcudaset_device('cuda:'+str(gpu_ids)) #可指定多卡

但是这种写法的优先级低,如果modelcuda()中指定了参数,那么torchcudaset_device()会失效,而且pytorch的官方文档中明确说明,不建议用户使用该方法。

第1节和第2节所说的方法同时使用是并不会冲突,而是会叠加。比如在运行代码时使用

CUDA_VISIBLE_DEVICES=2,3,4,5 python3 trainpy

而在代码内部又指定

modelcuda(1)

losscuda(1)

tensorcuda(1)

那么代码会在GPU3上运行。原理是CUDA_VISIBLE_DEVICES使得只有GPU2,3,4,5可见,那么这4张显卡,程序就会把它们看成GPU0,1,2,3,cuda(1)把模型/loss/数据都加载到了程序所以为的GPU1上,则实际使用的显卡是GPU3。

如果利用cuda()或torchcudaset_device()把模型加载到多个显卡上,而实际上只使用一张显卡运行程序的话,那么程序会把模型加载到第一个显卡上,比如如果在代码中指定了

modelcuda('cuda:2,1')

在运行代码时使用

CUDA_VISIBLE_DEVICES=2,3,4,5 python3 trainpy

这一指令,那么程序最终会在GPU4上运行。

3多卡数据并行torchnnDataParallel

多卡数据并行一般使用

torchnnDataParallel(model,device_ids)

其中model是需要运行的模型,device_ids指定部署模型的显卡,数据类型是list

device_ids中的第一个GPU(即device_ids[0])和modelcuda()或torchcudaset_device()中的第一个GPU序号应保持一致,否则会报错。此外如果两者的第一个GPU序号都不是0,比如设置为:

model=torchnnDataParallel(model,device_ids=[2,3])

modelcuda(2)

那么程序可以在GPU2和GPU3上正常运行,但是还会占用GPU0的一部分显存(大约500M左右),这是由于pytorch本身的bug导致的(截止140,没有修复这个bug)。

device_ids的默认值是使用可见的GPU,不设置modelcuda()或torchcudaset_device()等效于设置了modelcuda(0)

4 多卡多线程并行torchnnparallelDistributedDataParallel

(这个我是真的没有搞懂,,,,)

参考了这篇文章和这个代码,关于GPU的指定,多卡多线程中有2个地方需要设置

torchcudaset_device(argslocal_rank)

torchnnparallelDistributedDataParallel(model, device_ids=[argslocal_rank])

模型/loss/tensor设置为cuda()或cuda(argslocal_rank)均可,不影响正常运行。

5 推荐设置方式:

(1) 单卡

使用CUDA_VISIBLE_DEVICES指定GPU,不要使用torchcudaset_device(),不要给cuda()赋值。

(2) 多卡数据并行

直接指定CUDA_VISIBLE_DEVICES,通过调整可见显卡的顺序指定加载模型对应的GPU,不要使用torchcudaset_device(),不要给cuda()赋值,不要给torchnnDataParallel中的device_ids赋值。比如想在GPU1,2,3中运行,其中GPU2是存放模型的显卡,那么直接设置

CUDA_VISIBLE_DEVICES=2,1,3

(3) 多卡多线程

以上就是关于pythontorchloaddllpath打包报错全部的内容,包括:pythontorchloaddllpath打包报错、windowstorch找不到指定的程序torchlib、pytorch是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10111071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存