全中文网首发,可以收藏本教程纪念一下
还有个姊妹篇Pytorch版,请翻阅我的博文!
我这先晒一个结果:
首先这里推荐的系统比如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 子系统功能
你可以用图形界面,也可以用命令行:
图形化:
在控制面板添加开启新功能:
命令行:
以管理员权限启动 PowerShell,也可以用Windows Terminal(推荐,因为后面可以直接用这个启动Ubuntu,可以到Windows商店下载),然后输入以下命令启用虚拟机平台:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
以管理员权限启动 PowerShell,然后输入以下命令启用 Linux 子系统功能:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
PS:我上面的Terminal是不小心复制进去的,不要在意,回车就完事,反正识别不了。
提前开启WSL版本号:
wsl --set-version Ubuntu 2
这个你也可以在安装Ubuntu后再开。
第二步:安装一个 Linux 发行版
打开微软商店应用,在搜索框中输入"Linux"然后搜索,你可以看到搜索结果中有很多的 Linux 发行版可以选择。选择一个你喜欢的 Linux 发行版本然后安装:
需要注意,在商店中的安装并没有实际上完成 Linux 子系统的安装,你还需要运行一次已安装的 Linux 发行版以执行真正的安装操作,具体操作是在开始菜单,找到Ubuntu,点一下
会出现这个说明安装成功,如果出现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控制台:
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
支持的显卡自己可以看看,我的6600xt这个版本用不了,那么用不了怎么办?
你可以右上角搜:
比如我这个是6600
下载安装即可,千万不要试图安装没有列出你显卡型号的驱动,我给你一个tan90°
如果出现这个界面,那么恭喜你:
如果出现:
也不要慌,去下一个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
这边博主是很怀疑萌新的阅读能力的,你这就不能打开网页翻译吗
下载好后是这个,双击安装!
参考:
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的介绍

Tripletloss+交叉熵损失 训练 mnist例子

Tensorboard 无法打开网页 /不显示数据 / 命令行报错等解决办法集合

【语音识别】基于动态时间规整(DTW)的孤立字语音识别Matlab源码

将本地的anaconda环境封装到docker中并导出为压缩包

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

基于人工智能的盲人阅读器

实时目标追踪:ByteTrack算法步骤详解和代码逐行解析

EMNLP 2022投稿要求

基于pytorch语音识别_说话人分割聚类错误率从15.8%到2.2%的蜕变:基于序列传导的语音识别和说话人分割聚类模型联合…

推荐系统多目标学习之loss权重

麦克风阵列之一阶差分麦克风阵列

【学习笔记】Pytorch-两层BiLSTM情感计算Demo代码解读

轻松入门自然语言处理系列 05 机器学习基础

科大讯飞语音转文字_会议记录全程语音转文字。讯飞黑科技了解一下(续)
