- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Linux安装Pytorch1.8GPU(CUDA11.1)的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
先说下自己之前的环境(都是Linux系统,差别不大):
提示,如果想要保留之前的PyTorch1.6或1.7的环境,请不要卸载CUDA环境,可以通过Anaconda管理不同的环境,互不影响。但是需要注意你的NVIDIA驱动版本是否匹配.
在这里能够看到官方给的对应CUDA版本所需使用驱动版本.
通过上表可以发现,如果要使用CUDA11.1,那么需要将显卡的驱动更新至455.23或以上(Linux x86_64环境)。由于我之前的驱动版本是440.33.01,那么肯定不满足,所以需要更新下显卡的驱动。通过以下指令可以查看你电脑上的驱动版本:
如果你的驱动版本是满足的,那么可以直接跳到创建Pytorch1.8虚拟环境章节.
我之前安装的是NVIDIA-440的版本,找到之前下载的安装程序,然后打开终端通过以下指令进行卸载:
安装新驱动 。
1)下载驱动,直接去NVIDIA官网下载:https://www.nvidia.cn/Download/index.aspx?lang=cn 。
根据你的GPU型号以及操作信息选择对应的驱动,注意CUDA Toolkit11版的当前可选的只有11.0和11.2,而我们要装的是11.1所以选择11.2即可.
2)关闭Xserver服务 (如果没有安装桌面系统可以跳过) 我的桌面系统是gdm(GNOME Display Manager)类型的,通过systemctl可以看到:
显示结果:
● gdm.service - GNOME Display Manager Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-01-22 09:27:06 CST; 1 months 22 days ago Process: 32347 ExecStartPost=/bin/bash -c TERM=linux /usr/bin/clear > /dev/tty1 (code=exited, status=0/SUCCESS) Main PID: 32344 (gdm) Tasks: 22 CGroup: /system.slice/gdm.service ├─32344 /usr/sbin/gdm └─32357 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-mBzawN/databa... 。
Jan 22 09:27:06 localhost.localdomain systemd[1]: Starting GNOME Display Manager... Jan 22 09:27:06 localhost.localdomain systemd[1]: Started GNOME Display Manager. 。
关闭gdm服务:
注意,如果还开启了类似VNC远程桌面的服务也要记得关闭.
3)安装新版本驱动 。
4)检查nvidia服务 通过以下指令能够看到当前主机上的nvidia驱动版本以及所有可用GPU设备信息.
5)再次开启桌面服务、VNC等 如果不是gdm或者不使用桌面环境可以跳过此步骤 。
为了不同版本之间的环境互相隔离,强烈建议使用Anaconda的虚拟环境。其实使用起来也非常简单:
创建虚拟环境,这里我创建了一个名为torch18的虚拟环境,并且创建python3.8的编译环境.
安装完成后,激活虚拟环境 。
接着安装点常用的包,这里直接通过requirements.txt批量安装(不需要可以跳过) 。
requirements.txt文件里可以是你常用的一些包,例如:
如果需要退出虚拟环境,执行以下指令即可:
进入PyTorch官网:https://pytorch.org/ 。
我们通过选择自己的系统类型、安装方式以及CUDA的版本可以得到对应的安装指令。官方默认会顺带安装torchvision和torchaudio但我只需要torchvision所以通过以下指令安装 (注意,要进入对应的虚拟环境安装,例如上面的torch18环境):
安装完成后就可以使用了,不需要在单独安装CUDA,并且不会影响之前安装的CUDA版本.
下面进行简单的测试:
首先在终端输入python进入python环境:
然后导入torch包,查看cuda是否可用:
如果打印的是True表示成功 。
有些时候,可能你的设备无法连接外网,此时需要提前准备好需要安装的whl文件,那么我们这里就以torch和torchvision为例(注意安装torch前需要提前安装好numpy包)。刚刚我们在线安装时发现安装指令最后有个网址,https://download.pytorch.org/whl/torch_stable.html,没错就是官方存放所有的安装包,所以我们可以直接去那里下载.
我们在这里可以找到我们需要的torch-1.8.0+cu111-cp38-cp38-linux_x86_64.whl以及torchvision-0.9.0+cu111-cp38-cp38-linux_x86_64.whl两个文件即可。注意,cu111代表CUDA11.1,cp38表示python3.8的编译环境,linux_x86_64表示x86的平台64位操作系统。下载完成后,我们将这两个文件传入你的离线主机(服务器)中。接着在保存这两个文件夹的目录下打开终端:
进入对应虚拟环境 。
安装torch 。
安装torchvison 。
安装完成后进行简单的测试:
首先在终端输入python进入python环境:
然后导入torch包,查看cuda是否可用:
如果打印的是True表示成功 。
在有些情况下是需要使用docker来跑深度学习环境的(现在很多大公司都是使用paas平台来部署的)。那么我们就需要使用pytorch官方的docker镜像了。我们可以在docker hub上去搜索相关镜像,https://registry.hub.docker.com/。下图是我搜索的pytorch字段的结果(点击Tags后).
我们可以看到当前最新的docker 镜像有pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel和pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime,对于普通开发者下载pytorch/pytorch:1.8.0-cuda11.1-cudnn8-runtime就行了。关于安装docker的过程这里不赘述.
1)我们直接通过以下指令就能pull这个镜像了 。
2)注意,在启动镜像前需要确保已安装NVIDIA Container Toolkit,否则会报错(若已安装可直接跳过此步骤):
安装NVIDIA Container Toolkit,参考官方文档:https://github.com/NVIDIA/nvidia-docker 这里以Centos7为例:
首先根据你的系统类型以及版本下载对应.repo文件到/etc/yum.repos.d 。
清空yum的过期缓存数据(如果不是root用户需要加sudo) 。
安装NVIDIA Container Toolkit(如果不是root用户需要加sudo) 。
重启docker服务(如果不是root用户需要加sudo) 。
3)通过docker启动pytorch1.8.0容器 。
4)进入容器后可以通过nvidia-smi看到所有的GPU设备信息 。
5)接着进入python环境简单测试下pytorch能否正常调用GPU(打印True为成功) 。
到此这篇关于Linux安装Pytorch1.8GPU(CUDA11.1)的实现的文章就介绍到这了,更多相关Linux安装Pytorch GPU 内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/qq_37541097/article/details/114896215 。
最后此篇关于Linux安装Pytorch1.8GPU(CUDA11.1)的实现的文章就讲到这里了,如果你想了解更多关于Linux安装Pytorch1.8GPU(CUDA11.1)的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这是我关于 Stack Overflow 的第一个问题,这是一个很长的问题。 tl;dr 版本是:我如何使用 thrust::device_vector如果我希望它存储不同类型的对象 DerivedC
我已使用 cudaMalloc 在设备上分配内存并将其传递给内核函数。是否可以在内核完成执行之前从主机访问该内存? 最佳答案 我能想到的在内核仍在执行时启动 memcpy 的唯一方法是在与内核不同的流
是否可以在同一节点上没有支持 CUDA 的设备的情况下编译 CUDA 程序,仅使用 NVIDIA CUDA Toolkit...? 最佳答案 你的问题的答案是肯定的。 nvcc编译器驱动程序与设备的物
我不知道 cuda 不支持引用参数。我的程序中有这两个函数: __global__ void ExtractDisparityKernel ( ExtractDisparity& es)
我正在使用 CUDA 5.0。我注意到编译器将允许我在内核中使用主机声明的 int 常量。但是,它拒绝编译任何使用主机声明的 float 常量的内核。有谁知道这种看似差异的原因? 例如,下面的代码可以
自从 CUDA 9 发布以来,显然可以将不同的线程和 block 分组到同一组中,以便您可以一起管理它们。这对我来说非常有用,因为我需要启动一个包含多个 block 的内核并等待所有 block 都同
我需要在 CUDA 中执行三线性插值。这是问题定义: 给定三个点向量:x[nx]、y[ny]、z[nz] 和一个函数值矩阵func[nx][ny][nz],我想在 x、y 范围之间的一些随机点处找到函
我认为由于 CUDA 可以执行 64 位 128 位加载/存储,因此它可能具有一些用于加/减/等的内在函数。像 float3 这样的向量类型,在像 SSE 这样更少的指令中。 CUDA 有这样的功能吗
我有一个问题,每个线程 block (一维)必须对共享内存内的一个数组进行扫描,并执行几个其他任务。 (该数组最多有 1024 个元素。) 有没有支持这种操作的好库? 我检查了 Thrust 和 Cu
我对线程的形成和执行方式有很多疑惑。 首先,文档将 GPU 线程描述为轻量级线程。假设我希望将两个 100*100 矩阵相乘。如果每个元素都由不同的线程计算,则这将需要 100*100 个线程。但是,
我正在尝试自己解决这个问题,但我不能。 所以我想听听你的建议。 我正在编写这样的内核代码。 VGA 是 GTX 580。 xxxx >> (... threadNum ...) (note. Shar
查看 CUDA Thrust 代码中的内核启动,似乎它们总是使用默认流。我可以让 Thrust 使用我选择的流吗?我在 API 中遗漏了什么吗? 最佳答案 我想在 Thrust 1.8 发布后更新 t
我想知道 CUDA 应用程序的扭曲调度顺序是否是确定性的。 具体来说,我想知道在同一设备上使用相同输入数据多次运行同一内核时,warp 执行的顺序是否会保持不变。如果没有,是否有任何东西可以强制对扭曲
一个 GPU 中可以有多少个 CUDA 网格? 两个网格可以同时存在于 GPU 中吗?还是一台 GPU 设备只有一个网格? Kernel1>(dst1, param1); Kernel1>(dst2,
如果我编译一个计算能力较低的 CUDA 程序,例如 1.3(nvcc 标志 sm_13),并在具有 Compute Capability 2.1 的设备上运行它,它是否会利用 Compute 2.1
固定内存应该可以提高从主机到设备的传输速率(api 引用)。但是我发现我不需要为内核调用 cuMemcpyHtoD 来访问这些值,也不需要为主机调用 cuMemcpyDtoA 来读取值。我不认为这会奏
我希望对 CUDA C 中负载平衡的最佳实践有一些一般性的建议和说明,特别是: 如果经纱中的 1 个线程比其他 31 个线程花费的时间长,它会阻止其他 31 个线程完成吗? 如果是这样,多余的处理能力
CUDA 中是否有像 opencl 一样的内置交叉和点积,所以 cuda 内核可以使用它? 到目前为止,我在规范中找不到任何内容。 最佳答案 您可以在 SDK 的 cutil_math.h 中找到这些
有一些与我要问的问题类似的问题,但我觉得它们都没有触及我真正要寻找的核心。我现在拥有的是一种 CUDA 方法,它需要将两个数组定义到共享内存中。现在,数组的大小由在执行开始后读入程序的变量给出。因此,
经线是 32 根线。 32 个线程是否在多处理器中并行执行? 如果 32 个线程没有并行执行,则扭曲中没有竞争条件。 在经历了一些例子后,我有了这个疑问。 最佳答案 在 CUDA 编程模型中,warp
我是一名优秀的程序员,十分优秀!