在 WSL2 上部署 PyTorch

2023-10-27

开发项目需要使用AI,但是我习惯用 VMware 来开发各类项目,于是查到《Enable NVIDIA CUDA on WSL》可以实现 CUDA + VGPU 的功能。但是国内对这类资料较少,我就想顺便补个空白——在 WSL2 上部署 PyTorch。

前提

AI开发的工作者无非两种:

  1. 在 Ubuntu 或 Debian 上直接用Nouveau部署带 CUDA 的AI框架;
  2. 直接在 Windows 上用 Nvidia 官方的驱动,部署带CUDA的AI框架;

第一种方法,2019年我尝试过安装 Nvidia 的驱动,除了 Ubuntu 支持的最佳,其他发行版也就一般,希望这些社区能努力一下(我当时为14年的笔记本尝试各种发行版的安装测试),即使今年 Nvidia 突然声称为 Linux 搞官方驱动。第二种方法,虽然安装驱动方便多了,但是 Windows 一般用 MSVC,而多数AI框架都是基于 GCC 开发的。当然也可以用 MinGWcygwin 来实现 Windows 下的 GCC。

作为一个有洁癖的开发工程师,我一般都是在 VM 中开发的,优缺点懂得都懂。有些习惯就像“On your left”改不了了。VMware 只有 ESXI 支持 V-Gpu; VirtualBox 据我所知没有显卡直通,有也是 Intel 集显。这里非常感谢微软,在致力于拥抱 Docker 的时候,还开发了 WSL2。毕竟之前就发布过 Hyper-V,但是我觉得 WSL 相比于 Hyper-V 更加轻量,且对于 Windows 的资源整合度更高,可以在PS上直接调用 WSL 的 Bash。

安装 WSL2

Step 1 更新Windows 10 21H2

Step 2 启用 WSL2

Windows 10

  • x64系统需要Version 1903,Build 18362
  • ARM64需要Version 2004,Build 19041
    或者Windows 11

旧版:

升级后还需要进行一些配置才可以使用 WSL2,首先要启用 Windows 子系统功能,使用管理员权限打开一个 PowerShell 窗口,输入以下命令,并重启系统:

> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

重启后,Windows 默认启用的是 WSL1,还需要再启用虚拟机平台功能,在 PowerShell 中输入以下命令,并再次重启系统:

> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启后,在 PowerShell 中输入以下命令,将 WSL 默认版本改为 WSL2:

> wsl --set-default-version 2

新版:

直接执行 wsl --install

确认控制面板的启动或关闭 Windows 功能

Linux 的发行版可以在 Microsoft Store中下载。推荐Ubuntu

Step 3 检查安装成功

方法一:

> wsl -t -v

方法二:

> bash

安装miniconda

进入Ubuntu, 更新系统

$ sudo apt-get update
$ sudo apt-get upgrade

下载miniconda

$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ chmod +x Miniconda3-latest-Linux-x86_64.sh
$ ./Miniconda3-latest-Linux-x86_64.sh

更新conda

$ conda update conda

创建python的虚拟环境, 目前PyTorch支持到3.9

$ conda create -n python3.9 python=3.9

安装Nvidia驱动

官网上下载,WSL上可以不必安装其他Nvidia驱动。

安装PyTorch

按照PyTorch官网提供的pip命令下载太慢。直接在 https://download.pytorch.org/whl/torch_stable.html下载

在这里插入图片描述

注意:CU116是CUDA 11.6;CP3.9是python3.9

pip安装

$ pip3 install ./torch-1.12.1+cu116-cp39-cp39-linux_x86_64.whl
$ pip3 install torch===1.12.1 torchvision torchaudio -f https://download.pytorch.org/whl/torch_stable.html

测试代码

import torch

if __name__ == '__main__':
    print(torch.__version__)
    print(torch.cuda.is_available())

结语

这种方式主要适合AI开发环境,而生产环境还是应该用Linux环境。一般云计算服务厂商都帮我们直接部署好了。当然有条件的也可以用Mac OSX + AMD显卡。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WSL2 上部署 PyTorch 的相关文章

  • 如何向 django 中的用户模型添加自定义权限?

    默认情况下 在 django 中 当安装了 django contrib auth 的情况下运行syncdb时 它会在每个模型上创建默认权限 如 foo can change foo can delete 和 foo can add 要向模
  • 在python中发送多个文件

    我是 python 新手 我正在尝试以下操作 我有两个 calsess Server py and Client py我想将服务器目录中存在的所有文件发送到客户端的某个目录 IE C ServerDir file1 txt C Server
  • 窗口多维 Tensorflow 数据集

    我有形状的二维数据m by n我想要的窗口大小w沿着第一个轴进入数据集m w许多二维数组 每个数组的大小w by n 例如如果数据是 0 1 2 3 4 5 6 7 8 9 10 11 然后我想将其窗口化 0 1 2 3 4 5 6 7 8
  • Python子进程:cmd退出时的回调

    我目前正在使用启动一个程序subprocess Popen cmd shell TRUE 我对 Python 相当陌生 但 感觉 应该有一些 api 可以让我做类似的事情 subprocess Popen cmd shell TRUE po
  • 倒计时:01:05

    如何在 Python 中创建一个看起来像 00 00 分钟和秒 的倒计时时钟 它独立成一行 每次减少一actual秒 则应将旧计时器替换为低一秒的新计时器 01 00变成00 59它实际上击中了00 00 这是我开始使用但想要改造的基本计时
  • 从可变长度字符串中解析值的最佳方法是什么?

    假设我有一个由可变长度的逗号分隔的整数字符串 分割字符串并用值更新变量 如果存在 的最佳方法是什么 目前 我有以下内容 a b c 10 10 1 default values mylist int x for x in input spl
  • 这个 Python 字符串切片语句中的两个冒号的用途是什么?

    例如 str hello str 1 3 我在 Python 文档中哪里可以找到它 in 序列描述 http docs python org library stdtypes html index 510 s i j k slice of
  • 如何在 conda 中从一个文件安装多个包而不创建新环境?

    我从当前环境缺少的包的 yml 文件中获取了这些 我如何在当前环境中安装这些 channels defaults dependencies appdirs 1 4 3 py36h28b3542 0 asn1crypto 0 24 0 py3
  • BeautifulSoup - 抓取论坛页面

    我正在尝试抓取论坛讨论并将其导出为 csv 文件 其中包含 线程标题 用户 和 帖子 等行 其中后者是每个人的实际论坛帖子 我是 Python 和 BeautifulSoup 的初学者 所以我对此感到非常困难 我当前的问题是 csv 文件中
  • 检查空查询集

    我想确认这是否是检查空查询集的正确方法 如果这就是为什么我会遇到 UNIQUE 约束错误 syn check Synonym objects filter MD objects get filter dict synonym type St
  • 转置 pandas 数据框

    如何将列表列表转换为 panda 数据框 它不是以列的形式 而是以行的形式 usr bin env python from random import randrange import pandas data randrange 0 100
  • 替换 Python 列表/字典中的值?

    好的 我正在尝试过滤传递给我的列表 字典并稍微 清理 它 因为其中有某些值我需要删除 所以 如果它看起来像这样 records key1 AAA key2 BBB key3 CCC key4 AAA 我如何快速轻松地运行所有内容并将 AAA
  • 在 Django 视图中访问其他项目中的模型导致“表不存在”错误

    基地项目结构 baseproject baseapp models py class BaseModel models Model 其他项目结构 project app views py urls py 项目 app views py im
  • pytest 看不到正在测试的函数的日志

    我有一个像这样的烧瓶应用程序 from flask import Flask import logging app Flask name app route def catch all logging warning I m a warni
  • 虎鲸失踪

    使用plotly 导出静态图表时遇到小问题 Plotly 无法正确识别我已安装 orca 并且仍然存在与缺少 orca 相关的错误 我尝试更改 orca 目录 但它仍然无法正常工作 谁知道出了什么问题吗 My code import plo
  • 熊猫:SettingWithCopyWarning:[重复]

    这个问题在这里已经有答案了 我尝试使用以下代码将列转换为 日期 df DATE pd to datetime df DATE or df DATE pd to datetime df DATE 但我收到以下错误 Users xyz anac
  • 如何在google colaboratory上使用GPU升级tensorflow

    目前google colaboratory使用tensorflow 1 4 1 我想升级到1 5 0版本 每次当我执行时 pip install upgrade tensorflow命令 notebook实例成功将tensorflow版本升
  • 检查数组中是否有 3 个连续值高于某个阈值

    假设我有一个像这样的 np array a 1 3 4 5 60 43 53 4 46 54 56 78 有没有一种快速方法来获取 3 个连续数字都高于某个阈值的所有位置的索引 也就是说 对于某个阈值th 得到所有x其中 a x gt th
  • 从多个 .csv 文件创建混淆矩阵

    我有很多具有以下格式的 csv 文件 338 800 338 550 339 670 340 600 327 500 301 430 299 350 284 339 284 338 283 335 283 330 283 310 282 3
  • 无法让我的脚本自动生成一些值以在有效负载中使用

    我创建了一个脚本 通过随后发送两个 https 请求来从目标页面获取 html 元素 我的脚本可以完美地完成这件事 但是 我必须从 chrome 开发工具复制四个值来填充其中的四个键payload为了发送最终的http请求到达目标页面 这是

随机推荐

  • impdp或expdp报错ORA-39002: invalid operation,ORA-39070: Unable to open the log file

    oracle oracle rac01 backup cat expdp par USERID as sysdba DIRECTORY KMDATA EXP job name jinky exp filesize 5000m paralle
  • Java集合——Iterable和Iterator接口介绍

    Iterable Iterable和Iterator是什么 Iterable源码 Iterator源码 使用 Iterable和Iterator是什么 Iterable是Collection的实现接口 即是集合的最顶级父类 Iterator
  • 小白学股票基金_2

    到底是买股票还是买基金 说基金和股票差不多指的应该是偏股型基金 但是基金里面还有债券型 QDII以及非常大众化的货币型基金 众所周知的余额宝就是一款货币型基金啦 等等 风险等级也不一样 所以 为防止这样混为一谈 我们这里讨论的就是炒股和买偏
  • 0.0 Windows + Linux(Ubuntu20.04) 超简单的双系统安装

    目录 一 U盘启动盘的制作 1 下载操作系统 2 下载U启动制作工具 二 磁盘分配 三 Ubuntu20 04系统安装 1 修改bios为U启动 2 安装配置Ubuntu 2 1 Install Ubuntu 2 2 安装关键之处在于分区
  • 4年经验来面试20K的测试岗,连基础都不会,还不如招应届生!

    公司前段时间缺人 也面了不少测试 结果竟然没有一个合适的 一开始瞄准的就是中级的水准 也没指望来大牛 提供的薪资在10 20k 面试的人很多 但平均水平很让人失望 看简历很多都是3 4年工作经验 但面试中 不提工具和编程 仅仅基础的技术很多
  • Flink简单教学5-时间

    时间 Time Flink支持三种不同的时间 处理时间 processing time 指当前操作的时间 如 map 当程序以处理时间运行 所有基于时间的操作 窗口 都依赖各个operator的机器时间 事件时间 event time 事件
  • office 2010 projectn visio 下载

    Office 2010 project专业版 64位 ed2k file cn project professional 2010 x64 515551 exe 453437272 84D14496F889767D46C9DE576154B
  • 矩阵的基本演算

    目录 转置 逆 迹 行列式 转置 A B T
  • 网易低代码引擎Tango正式开源

    一 Tango简介 Tango 是一个用于快速构建低代码平台的低代码设计器框架 借助 Tango 只需要数行代码就可以完成一个基本的低代码平台前端系统的搭建 Tango 低代码设计器直接读取前端项目的源代码 并以源代码为中心 执行和渲染前端
  • element ui Tag 动态添加标签

    1 首先调接口获取到标签列表 级联选择器如果选择的不是第三级菜单 async getParamsData if this selectedCateKeys length 3 级联选择器不会有参数 下面的面板也都为空 this selecte
  • 三层架构到DDD四层架构演进

    应用架构演化 三层架构 三层架构 为什么还画了一层 Model 呢 因为 Model 只是简单的 Java Bean 里面只有数据库表对应的属性 有的应用会将其单独拎出来作为一个 但实际上可以合并到 DAO 层 第一步 数据模型与DAO层合
  • 检测是否为快乐数

    编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 1 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 2 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 3 如果可以变为1 那么这个数就是快
  • MySQL类型定义 - 字符串类型

    1 char类型 1 CHAR类型和VARCHAR类型 CHAR类型和VARCHAR类型都在创建表时指定了最大长度 其基本形式如下 字符串类型 M 其中 字符串类型 参数指定了数据类型为CHAR类型还是VARCHAR类型 M参数指定了该字符
  • 数据结构 —七大排序算法(图文详细版)

    文章目录 前言 一 插入排序 1 直接插入排序 1 原理 2 实现 3 稳定性 时间复杂度 2 希尔排序 1 原理 2 具体实现 3 稳定性 时间复杂度 二 选择排序 1 直接选择排序 1 原理 2 具体实现 3 稳定性 时间复杂度 4 优
  • chromebook刷_使用Chromebook编码

    chromebook刷 Chromebooks are awesome They re relatively simple and inexpensive devices that run Chrome OS a stripped down
  • 【linux】基本工具gcc/g++及Makefile

    文章目录 一 程序翻译过程 1 程序的翻译过程 2 理解选项的含义 3 动态链接与静态链接 二 Linux项目自动化构建工具 make Make le 1 背景 2 实例说明 3 原理 4 语法 5 为什么gcc不更新文件 6 推导规则 三
  • eclipse svn 忽略文件夹

    以忽略 target 文件夹为例 window gt preferences gt team gt Ignored Resource gt Add Pattern gt 新建一个 target gt ok 再次同步可见traget下所有文件
  • 2023华为OD机试真题Java实现【食堂供餐/二分法】

    题目内容 某公司员工食堂以盒饭方式供餐 为将员工取餐排队时间降低为0 食堂的供餐速度必须要足够快 现在需要根据以往员工取餐的统计信息 计算出一个刚好能达成排队时间为0的最低供餐速度 即 食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求
  • 假如让你来设计SSL/TLS协议

    前言 说起网络通信协议 相信大家对 TCP 和 HTTP 都很熟悉 它们可以说是当今互联网通信的基石 但是 在网络安全方面 它们却是有着很大安全风险 窃听风险 第三方攻击者可以随意窃听通信内容 比如获取支付账号密码 冒充风险 第三方攻击者可
  • 在 WSL2 上部署 PyTorch

    开发项目需要使用AI 但是我习惯用 VMware 来开发各类项目 于是查到 Enable NVIDIA CUDA on WSL 可以实现 CUDA VGPU 的功能 但是国内对这类资料较少 我就想顺便补个空白 在 WSL2 上部署 PyTo