【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】

人工智能33

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
全中文网首发,可以收藏本教程纪念一下

还有个姊妹篇Pytorch版,请翻阅我的博文!

我这先晒一个结果:
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】

首先这里推荐的系统比如Win10不要太老,尽量新一点,特别是针对WSL2

本人用的显卡是AMD Radeon RX6600(后面不带XT,很重要!因为还有XT版嘛,性能差20%左右)
CPU:i5 12600KF(目前的神卡,干翻上一代i9 K)
系统WIn10专业版,内部版本号:19042,版本不要太老,太老自己Windows更新那边升级一下到最新。

这里出现了两个分叉,一个是用我们本地Window环境,一个是用WSL2,如果你是准备用WSL2那么你最好是安装Window10/11专业版或家庭版,不要安装企业版或服务器版,因为后面两个没有Windows商店,对我们安装Ubuntu有难度。

场景1:在Window10/11 WSL2下搭建Tensorflow GPU深度学习环境
A:搭建WSL2:
这一步最好是看准自己的显卡,并不是越新的A卡就支持,比如我的6600就不支持,但是6600XT是支持的
目前我知道的比较主流的保证支持的显卡是:6600XT和6900XT,具体可以参考AMD官网:

https://www.amd.com/en/support/kb/release-notes/rn-rad-win-wsl-support

第零步:主板开启虚拟化支持
第一步:启用虚拟机平台和 Linux 子系统功能
第二步:安装一个 Linux 发行版
第三步:启用 WSL2*

第零步:自己百度自己主板型号,开启即可,我的主板是开启vt-d

第一步:启用虚拟机平台和Linux 子系统功能

你可以用图形界面,也可以用命令行:
图形化:
在控制面板添加开启新功能:
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】

命令行:
以管理员权限启动 PowerShell,也可以用Windows Terminal(推荐,因为后面可以直接用这个启动Ubuntu,可以到Windows商店下载),然后输入以下命令启用虚拟机平台:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

以管理员权限启动 PowerShell,然后输入以下命令启用 Linux 子系统功能:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
PS:我上面的Terminal是不小心复制进去的,不要在意,回车就完事,反正识别不了。

提前开启WSL版本号:

wsl --set-version Ubuntu 2

这个你也可以在安装Ubuntu后再开。
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】

第二步:安装一个 Linux 发行版
打开微软商店应用,在搜索框中输入"Linux"然后搜索,你可以看到搜索结果中有很多的 Linux 发行版可以选择。选择一个你喜欢的 Linux 发行版本然后安装:
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
需要注意,在商店中的安装并没有实际上完成 Linux 子系统的安装,你还需要运行一次已安装的 Linux 发行版以执行真正的安装操作,具体操作是在开始菜单,找到Ubuntu,点一下
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
会出现这个说明安装成功,如果出现error,不要担心,你可以重启电脑再试试

第三步:启用 WSL2
你在前面提前开启WSL版本号,这步可以不做!如果没开那么可以这样:

使用 wsl -l 可以列出当前系统上已经安装的 Linux 子系统名称。注意这里的 -l 是列表"list"的缩写,是字母 l 不是其他字符。

wsl -l

如果提示 wsl 不是内部或外部命令,说明你没有启用"适用于 Windows 的 Linux 子系统",请先完成本文第一步。

如果提示没有发现任何已安装的 Linux,说明你没有安装 Linux 发行版,或者只是去商店下载了,没有运行它执行真正的安装,请先完成本文第二步。

使用 wsl --set-version 2 命令可以设置一个 Linux 发行版的 WSL 版本。命令中 替换为你安装的 Linux 发型版本的名称,也就是前面通过 wsl -l 查询到的名称。

wsl --set-version Ubuntu 2

以上内容部分参考自:

https://walterlv.blog.csdn.net/article/details/101508601
谢谢作者!

然后后面大部分是我的私货:
成功安装Ubuntu后,我们可以用Windows Terminal打开Ubuntu控制台:
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】

OK,以上就是安装WSL2所有步骤,也适合安装N卡版的,那个安装更简单,弄好直接可以使用原版的TF GPU或者Pytorch GPU而不需要安装DirectML版

Flag1:
然后是我们的重点,安装AMD显卡SDK软件Radeon Software Adrenalin 2020 Edition,相当于英伟达的Cuda,注意这个不是我们安装系统后用什么驱动精灵安装的那个显卡驱动,这个驱动是SDK,就是AMD版的Cuda!下载不要下载错了,不要下载那个带Mini的版本,完整版是400多M!
PS:WSL2 GPU支持版本一定要安装下面链接的版本(rn-rad-win-wsl-support)

下载官网:

https://www.amd.com/en/support/kb/release-notes/rn-rad-win-wsl-support
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】

支持的显卡自己可以看看,我的6600xt这个版本用不了,那么用不了怎么办?
你可以右上角搜:
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】

比如我这个是6600
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
下载安装即可,千万不要试图安装没有列出你显卡型号的驱动,我给你一个tan90°【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
如果出现这个界面,那么恭喜你:
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
如果出现:
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
也不要慌,去下一个3DM最新的环境包合集,一共1G多,除了里面的N卡物理插件不要安装,其他没有冲突都可以安装!
比如这个:

https://dl.3dmgame.com/patch/89066.html

然后重新安装我们的Radeon Software Adrenalin 2020 Edition

按好后我们就可以进入Ubuntu安装我们的TF了,这时,可以给他装个GUI,可以看我另外一篇博文
然后按个MiniConda:

我们的tf dml支持的Python版本:
Python x86-64 3.5, 3.6, or 3.7

推荐用Py3.7以及对应的conda
官网:

https://docs.conda.io/en/latest/miniconda.html

安装Tensorflow-DirectML:

pip install tensorflow-directml==1.15.5

安装VSCODE

安装Keras:

这里我们的tf是1.15.5
所以可以参考这里:

Tensorflow 和 Keras 版本对应关系
https://blog.csdn.net/douzi949389/article/details/108146536

这里推荐安装: Keras 2.3.1

pip install keras==2.3.1

检测是否支持AMD GPU:

import tensorflow as tf
tf.test.is_gpu_available()
print(tf.test.is_gpu_available(cuda_only=False) )

更多例子可以移步官网:

https://github.com/microsoft/DirectML/tree/master/TensorFlow

场景2:在Windows本地使用Tensorflow-DirectML

这个更加简单了,那你就根本不需要安装WSL2了,直接:

goto Flag1

把所有的步骤都在Windows下操作即可!

PS:
RX6600的小伙伴SDK直接安装这个:
https://www.amd.com/en/support/kb/release-notes/rn-rad-win-21-10-2-rx6600
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
这边博主是很怀疑萌新的阅读能力的,你这就不能打开网页翻译吗
【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
下载好后是这个,双击安装!

参考:
https://docs.microsoft.com/zh-cn/windows/ai/directml/gpu-tensorflow-windows

Original: https://blog.csdn.net/weixin_44029053/article/details/121581870
Author: superowner001
Title: 【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】



相关阅读

Title: einops库中rearrange,reduce和repeat的介绍

用法介绍

einops是一个简洁优雅操作张量的库,并且支持对numpy,pytorch,tensorflow中的张量进行操作,该库最大的优点是函数的使用逻辑清晰明了,其中中常用的三个函数分别是rearrange,repeat,reduce。

  • rearrange: 用于对张量的维度进行重新变换排序,可用于替换pytorch中的reshape,view,transpose和permute等操作
  • repeat: 用于对张量的某一个维度进行复制,可用于替换pytorch中的repeat
  • reduce: 类似于tensorflow中的reduce操作,可以用于求平均值,最大最小值的同时压缩张量维度

einops中rearrange,repeat,reduce的函数细节介绍如下所示

def rearrange(inputs, pattern, **axes_lengths)⟶ \longrightarrow ⟶ transform_inputs

  • inputs (tensor): 表示输入的张量
  • pattern (str): 表示张量维度变换的映射关系
  • axes_lengths**: 表示按照指定的规格形式进行变换

def repeat(inputs, pattern, **axes_lengths)⟶ \longrightarrow ⟶ transform_inputs

  • inputs (tensor): 表示输入的张量
  • pattern (str): 表示张量按照某个维度复制的映射关系
  • axes_lengths**: 表示按照指定的规格形式进行复制

def reduce(inputs, pattern, reduction, **axes_lengths)⟶ \longrightarrow ⟶ transform_inputs

  • inputs (tensor): 表示输入的张量
  • pattern (str): 表示张量执行某种运算做操作后维度变换的映射关系
  • reduction (str): 表示运算操作的类型,分别有'max','min','sum','mean','prod'
  • axes_lengths**: 表示按照指定的规格形式进行运算操作

代码示例

einops库中rearrange函数的代码示例如下所示


>>> images = [np.random.randn(30, 40, 3) for _ in range(32)]

>>> rearrange(images, 'b h w c -> b h w c').shape
(32, 30, 40, 3)

>>> rearrange(images, 'b h w c -> (b h) w c').shape
(960, 40, 3)

>>> rearrange(images, 'b h w c -> h (b w) c').shape
(30, 1280, 3)

>>> rearrange(images, 'b h w c -> b c h w').shape
(32, 3, 30, 40)

>>> rearrange(images, 'b h w c -> b (c h w)').shape
(32, 3600)

>>> rearrange(images, 'b (h1 h) (w1 w) c -> (b h1 w1) h w c', h1=2, w1=2).shape
(128, 15, 20, 3)

>>> rearrange(images, 'b (h h1) (w w1) c -> b h w (c h1 w1)', h1=2, w1=2).shape
(32, 15, 20, 12)

einops库中repeat函数的代码示例如下所示


>>> image = np.random.randn(30, 40)

>>> repeat(image, 'h w -> h w c', c=3).shape
(30, 40, 3)

>>> repeat(image, 'h w -> (repeat h) w', repeat=2).shape
(60, 40)

>>> repeat(image, 'h w -> h (repeat w)', repeat=3).shape
(30, 120)

>>> repeat(image, 'h w -> (h h2) (w w2)', h2=2, w2=2).shape
(60, 80)

>>> downsampled = reduce(image, '(h h2) (w w2) -> h w', 'mean', h2=2, w2=2)
>>> repeat(downsampled, 'h w -> (h h2) (w w2)', h2=2, w2=2).shape
(30, 40)

einops库中reduce函数的代码示例如下所示

>>> x = np.random.randn(100, 32, 64)

>>> y = reduce(x, 't b c -> b c', 'max')

>>> y = reduce(x, 'time batch channel -> batch channel', 'max')
>>> x = np.random.randn(10, 20, 30, 40)

>>> y1 = reduce(x, 'b c (h1 h2) (w1 w2) -> b c h1 w1', 'max', h2=2, w2=2)

>>> y2 = rearrange(y1, 'b (c h2 w2) h1 w1 -> b c (h1 h2) (w1 w2)', h2=2, w2=2)
>>> assert parse_shape(x, 'b _ h w') == parse_shape(y2, 'b _ h w')

>>> reduce(x, 'b c (h1 h2) (w1 w2) -> b c h1 w1', 'max', h1=3, w1=4).shape
(10, 20, 3, 4)

>>> reduce(x, 'b c h w -> b c', 'mean').shape
(10, 20)

>>> y = x - reduce(x, 'b c h w -> () c () ()', 'mean')

>>> y = x - reduce(x, 'b c h w -> b c () ()', 'mean')

Original: https://blog.csdn.net/qq_38406029/article/details/122322166
Author: 鬼道2022
Title: einops库中rearrange,reduce和repeat的介绍

相关文章
自然语言处理中的小样本学习 人工智能

自然语言处理中的小样本学习

目录 什么是小样本学习,4/8/16 为什么小样本学习重要:跟人类比一样模型本身的能力体现、降低数据标注成本(一条标注1元,找5个众包要5元) 降本增效 发展历程 分类 预训练时代 标准微调 标准微调...
EMNLP 2022投稿要求 人工智能

EMNLP 2022投稿要求

记录EMNLP 2022投稿要求,原网址连接:https://2022.emnlp.org/calls/papers/Overview 。 由于原网页内容较多,这里列几个我认为值得注意的地方。 The...