技术背景

PyTorch是一个非常常用的AI框架,主要归功于其简单易用的特点,深受广大科研人员的喜爱。在前面的一篇文章中我们介绍过制作PyTorch的Singularity镜像的方法,这里我们单独抽出PyTorch的安装和使用,再简单的聊一聊。

安装Torch

常规的安装方案可以使用源码安装、pip安装、conda安装和容器安装等,这里我们首选推荐的是conda安装的方法。关于conda,其实没必要安装完整版本的anaconda,装一个miniconda就可以了。假定我们已经安装好了conda,那么首先要创建一个专用的pytorch虚拟环境:

$ conda create -n pytorch python=3.9
Retrieving notices: ...working... done
Collecting package metadata (current_repodata.json): done
Solving environment: done ==> WARNING: A newer version of conda exists. <==
current version: 23.1.0
latest version: 24.4.0 Please update conda by running $ conda update -n base -c defaults conda Or to minimize the number of packages updated during conda update use conda install conda=24.4.0 ## Package Plan ## environment location: /home/dechin/anaconda3/envs/pytorch added / updated specs:
- python=3.9 The following packages will be downloaded: package | build
---------------------------|-----------------
ca-certificates-2024.3.11 | h06a4308_0 127 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libffi-3.4.4 | h6a678d5_1 141 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
openssl-3.0.13 | h7f8727e_1 5.2 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
pip-23.3.1 | py39h06a4308_0 2.6 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
python-3.9.19 | h955ad1f_1 25.1 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
setuptools-69.5.1 | py39h06a4308_0 1003 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
sqlite-3.45.3 | h5eee18b_0 1.2 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
tk-8.6.14 | h39e8969_0 3.4 MB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
tzdata-2024a | h04d1e81_0 116 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
wheel-0.43.0 | py39h06a4308_0 109 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
xz-5.4.6 | h5eee18b_1 643 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
zlib-1.2.13 | h5eee18b_1 111 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
------------------------------------------------------------
Total: 39.8 MB The following NEW packages will be INSTALLED: _libgcc_mutex anaconda/pkgs/main/linux-64::_libgcc_mutex-0.1-main
_openmp_mutex anaconda/pkgs/main/linux-64::_openmp_mutex-5.1-1_gnu
ca-certificates anaconda/pkgs/main/linux-64::ca-certificates-2024.3.11-h06a4308_0
ld_impl_linux-64 anaconda/pkgs/main/linux-64::ld_impl_linux-64-2.38-h1181459_1
libffi anaconda/pkgs/main/linux-64::libffi-3.4.4-h6a678d5_1
libgcc-ng anaconda/pkgs/main/linux-64::libgcc-ng-11.2.0-h1234567_1
libgomp anaconda/pkgs/main/linux-64::libgomp-11.2.0-h1234567_1
libstdcxx-ng anaconda/pkgs/main/linux-64::libstdcxx-ng-11.2.0-h1234567_1
ncurses anaconda/pkgs/main/linux-64::ncurses-6.4-h6a678d5_0
openssl anaconda/pkgs/main/linux-64::openssl-3.0.13-h7f8727e_1
pip anaconda/pkgs/main/linux-64::pip-23.3.1-py39h06a4308_0
python anaconda/pkgs/main/linux-64::python-3.9.19-h955ad1f_1
readline anaconda/pkgs/main/linux-64::readline-8.2-h5eee18b_0
setuptools anaconda/pkgs/main/linux-64::setuptools-69.5.1-py39h06a4308_0
sqlite anaconda/pkgs/main/linux-64::sqlite-3.45.3-h5eee18b_0
tk anaconda/pkgs/main/linux-64::tk-8.6.14-h39e8969_0
tzdata anaconda/pkgs/main/noarch::tzdata-2024a-h04d1e81_0
wheel anaconda/pkgs/main/linux-64::wheel-0.43.0-py39h06a4308_0
xz anaconda/pkgs/main/linux-64::xz-5.4.6-h5eee18b_1
zlib anaconda/pkgs/main/linux-64::zlib-1.2.13-h5eee18b_1 Proceed ([y]/n)? y Downloading and Extracting Packages Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate pytorch
#
# To deactivate an active environment, use
#
# $ conda deactivate

这里我们是基于Python3.9版本创建了一个Python虚拟环境。相比于容器和虚拟机来说,虚拟环境结构更加简单,非常适用于本地的Python软件管理。当然,如果是在服务器上面运行,那还是推荐容器的方案多一些。有了基础的Python环境之后,可以去PyTorch官网找找适用于自己本地环境的conda安装命令:

然后把这条命令复制到自己本地进行安装。建议在安装的时候加上-y的配置,就省的加载一半还需要你自己手动去配置一个输入一个y来决定是否继续下一步安装。因为这个安装的过程可能也会比较耗时,尤其网络对于一部分国内的IP可能并不是那么的友好。

$ conda install -y pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
Solving environment: done ## Package Plan ## environment location: /home/dechin/anaconda3/envs/pytorch added / updated specs:
- pytorch
- pytorch-cuda=11.8
- torchaudio
- torchvision The following packages will be downloaded: package | build
---------------------------|-----------------
charset-normalizer-2.0.4 | pyhd3eb1b0_0 35 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
jinja2-3.1.3 | py39h06a4308_0 269 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libdeflate-1.17 | h5eee18b_1 64 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
libnpp-11.8.0.86 | 0 147.8 MB nvidia
libunistring-0.9.10 | h27cfd23_0 536 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
typing_extensions-4.9.0 | py39h06a4308_1 54 KB https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
------------------------------------------------------------
Total: 148.8 MB The following NEW packages will be INSTALLED: blas anaconda/pkgs/main/linux-64::blas-1.0-mkl
bzip2 anaconda/pkgs/main/linux-64::bzip2-1.0.8-h5eee18b_6
certifi anaconda/pkgs/main/linux-64::certifi-2024.2.2-py39h06a4308_0
charset-normalizer anaconda/pkgs/main/noarch::charset-normalizer-2.0.4-pyhd3eb1b0_0
cuda-cudart nvidia/linux-64::cuda-cudart-11.8.89-0
cuda-cupti nvidia/linux-64::cuda-cupti-11.8.87-0
...
pytorch pytorch/linux-64::pytorch-2.3.0-py3.9_cuda11.8_cudnn8.7.0_0
pytorch-cuda pytorch/linux-64::pytorch-cuda-11.8-h7e8668a_5
pytorch-mutex pytorch/noarch::pytorch-mutex-1.0-cuda
zstd anaconda/pkgs/main/linux-64::zstd-1.5.5-hc292b87_2 Downloading and Extracting Packages Preparing transaction: done
Verifying transaction: done
Executing transaction: done

安装完成后可以通过如下指令,在bash命令行里面检查一下是否安装成功了PyTorch的CUDA版本:

$ python3 -c "import torch;print(torch.cuda.is_available())"
True

如果输出为True则表明安装成功。另外顺便一提,如果在conda安装的过程中出现如下的报错:

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/nvidia/linux-64/libnpp-11.8.0.86-0.tar.bz2>
Elapsed: - An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way. CancelledError()
CancelledError()
CancelledError()
CancelledError()

一般情况下就是由网络问题导致的,但也并不是完全无法链接,我们同样的命令行多输入几次就可以了,直到安装完成为止。

PyTorch自动微分

关于自动微分的原理,读者可以参考一下之前的这篇手搓自动微分的文章,PyTorch大概就是使用的这个自动微分的原理。在PyTorch框架下,我们可以通过backward函数来自定义反向传播函数,这一点跟MindSpore框架有所不同,MindSpore框架下自定义反向传播函数使用的是bprop函数,MindSpore自定义反向传播相关内容可以参考下这篇文章。如下所示是一个Torch的用例:

# 忽略告警信息
import warnings
warnings.filterwarnings("ignore") import torch # 自定义可微分的类型
class Gradient(torch.autograd.Function):
# 前向传播
@staticmethod
def forward(ctx, x, w=None):
# 保存一个参数到计算图中
ctx.save_for_backward(w)
return x
# 反向传播
@staticmethod
def backward(ctx, g):
w, = ctx.saved_tensors
if w is None:
return g
else:
return g * w, None # 非加权自动微分测试
x = torch.autograd.Variable(torch.tensor(3.14), requires_grad=True)
g = torch.autograd.Variable(torch.tensor(3.15))
gradient = Gradient()
# 前向传播
y = gradient.apply(x)
print (y)
# 反向传播
y.backward(g)
# 打印梯度
print (x.grad)
# 加权自动微分测试
x = torch.autograd.Variable(torch.tensor(3.14), requires_grad=True)
g = torch.autograd.Variable(torch.tensor(3.15))
w = torch.autograd.Variable(torch.tensor(2.0))
z = gradient.apply(x, w)
print (z)
z.backward(g)
print (x.grad)

输出结果为:

tensor(3.1400, grad_fn=<GradientBackward>)
tensor(3.1500)
tensor(3.1400, grad_fn=<GradientBackward>)
tensor(6.3000)

这样一来,就把需要输入到反向传播函数中的加权值传了进去。因为在正常的backward函数中,相关的输入类型都是规定好的,不能随便加输入,所以要从前向传播中传递给计算图。在这个案例中,顺便介绍下PyTorch开源仓库中的两个Issue。第一个问题是,PyTorch的前向传播函数中,如果从外部传入一个关键字参数,会报错

关于这个问题,官方做了如下解释:

大体意思就是,如果使用关键字类型的参数输入,会给参数校验和结果返回带来一些困难。同时给出了一个临时的解决方案:

其实也就是我们这个案例中所采用的方案,套一个条件语句就可以了。另外一条Issue是,如果涉及到多个输入,那么在反向传播函数中也要给到多个输出:

不过在这个Issue中,提Issue的人本身也给出了一个方案,就是直接在返回结果中给一个None值。

总结概要

本文介绍了热门AI框架PyTorch的conda安装方案,与简单的自动微分示例。并顺带讲解了一下PyTorch开源Github仓库中的两个Issue内容,分别是自动微分的关键词参数输入问题与自动微分参数数量不匹配时的参数返回问题,并包含了这两个Issue的解决方案。

版权声明

本文首发链接为:https://www.cnblogs.com/dechinphy/p/torch.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

参考链接

  1. https://pytorch.org/get-started/locally/
  2. https://www.cnblogs.com/dechinphy/p/pytorch.html
  3. https://github.com/pytorch/pytorch/issues/16940
  4. https://github.com/Lightning-AI/pytorch-lightning/issues/6624
  5. https://blog.csdn.net/winycg/article/details/104410525

PyTorch的安装与使用的更多相关文章

  1. [pytorch学习]1.pytorch ubuntu安装

    看完了Deep Learning with Python,尝试了部分Keras的demo代码. 感觉Keras虽然容易上手,能够快速搭建出一个通用的模型,但是缺乏对底层的控制. 同时,在使用了自己编译 ...

  2. python 安装pytorch 及 安装失败解决办法

    python 安装pytorch 及 安装失败解决办法 [转] pytorch安装失败解决办法 [转] 一分钟在win10终端成功安装pytorch pytorch 的安装方法有2种,一种是pip安装 ...

  3. PyTorch图文安装教程(Win10),含遇到的问题及解决办法

    PyTorch安装教程(Win10),含遇到的问题及解决办法 1. 环境准备 首先,打开PyTorch官网:https://pytorch.org/get-started/locally/ 向下可以看 ...

  4. Pytorch windows10安装教程

    强烈建议安装anaconda之后再来安装这个pytorch,具体怎么安装百度搜索就知道了. 温馨提示,在安装anaconda的时候记得将"添加到环境变量"(安装的时候是英文的)这一 ...

  5. 深度学习PyTorch环境安装——mac

    参考:http://python.jobbole.com/87522/ 1.首先要安装Anaconda 1)什么是Anaconda Anaconda是Python的包管理器和环境管理器,是一个包含18 ...

  6. Win10下Pytorch的安装和使用[斗之力三段]

    简介: 看到paper的代码是用Pytorch实现的,试图理解代码,但是看不懂,只能先学一些基础教程来帮助理解.笔记本电脑配置较低,所以安装一个没有CUDA的版本就可以了.安装完之后,就可以跟着教程边 ...

  7. 安装配置环境 CUDA以及CUDNN tensorflow pytorch pip安装 虚拟环境

    1.  在win10中利用Anaconda直接安装tensorflow-gpu 不需要另行安装cuda cudnn 但是不知道电脑会自动适配所需的版本吗,不过把电脑显卡驱动更新一下,就都也可以了吧. ...

  8. Pytorch 的安装

    GPU版本的安装 Windows平台 CPU 版本安装 conda install pytorch torchvision cpuonly -c puython Windows平台需安装VC,需要的联 ...

  9. windows下cuda、cudnn以及pytorch的安装

    一.在anaconda下配置cuda.cudnn以及pytorch环境 1.打开Anaconda Prompt,输入 conda create -n pytorch python=3.8        ...

  10. windows版anaconda+CUDA9.0+cudnn7+pytorch+tensorflow安装

    1.Anaconda 首先下载Anaconda,它是一个开源的python发行版本,含有众多科学工具包,直接安装anaconda免除了许多包的手动安装,点击这里下载. 按照你的实际情况选择下载.下载完 ...

随机推荐

  1. ZYNQ系列学习GPIO实验

    GPIO实验 一.实验原理 调用GPIO实现PS对引脚的控制 二.实验步骤 1.建立工程 这部分是ivado的操作内容,这里不做过多说明. 2.添加ZYNQ处理器IP 在左侧菜单栏中双击Create  ...

  2. Scala 特质自身类型

    1 package chapter06 2 3 object Test16_TraitSelfType { 4 def main(args: Array[String]): Unit = { 5 va ...

  3. C++设计模式 - 观察者模式(Observer)

    组件协作模式: 现代软件专业分工之后的第一个结果是"框架与应用程序的划分","组件协作"模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用 ...

  4. Postman模拟浏览器网页请求并获取网页数据

      本文介绍在浏览器中,获取网页中的某一个请求信息,并将其导入到Postman软件,并进行API请求测试的方法.   Postman是一款流行的API开发和测试工具,它提供了一个用户友好的界面,用于创 ...

  5. CSP2019-S2总结

    目录 前言 洛谷 5657 格雷码 代码(找规律) 洛谷 5658 括号树 分析 代码 洛谷 5659 树上的数 洛谷 5664 Emiya 家今天的饭 洛谷 5665 划分 分析 代码 洛谷 566 ...

  6. 【福利活动】深度体验OpenHarmony对接华为云IoT

      本文主要介绍基于OpenHarmony 3.0来接入IoTDA,以BearPi-HM_Nano开发板为例,使用huaweicloud_iot_link SDK对接华为云物联网平台的简单流程.文末为 ...

  7. 本周四晚19:00知识赋能第六期第5课丨OpenHarmony WiFi子系统

    OpenAtom OpenHarmony(以下简称"OpenHarmony")开源开发者成长计划项目自 2021 年 10 月 24 日上线以来,在开发者中引发高度关注. 成长计划 ...

  8. 基于新版宝塔Docker部署在线客服系统过程小记

    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 客服系统开发过程中,最让我意外的是对 TCP/IP 协议的认识.过去一直认 ...

  9. [llama懒人包]ChatGPT本地下位替代llama-7b,支持全平台显卡/CPU运行

    LLAMA的懒人包: 链接: https://pan.baidu.com/s/1xOw8-eP8QB--u6y644_UPg?pwd=0l08 提取码:0l08 模型来源:elinas/llama-7 ...

  10. Native API在HarmonyOS应用工程中的使用指导

      HarmonyOS的应用必须用js来桥接native.需要使用ace_napi仓中提供的napi接口来处理js交互.napi提供的接口名与三方Node.js一致,目前支持部分接口,符号表见ace_ ...