核显 DirectML 深度学习环境

本贴最后更新于 903 天前,其中的信息可能已经沧海桑田

参考文档:

  tensorflow-directml 官方文档

  Enable TensorFlow with DirectML in WSL

  ‍

  环境: win10 + wsl2-ubuntu20.04

  安装显卡驱动(确保型号匹配,我是 amd 的 r5 核显):

  1. py36 环境安装

    截至 2022 年 10 月 5 日, tensorflow-directml==1.15.8 最高支持 py37,但是其依赖 gast 0.2.2 并不支持 pep517 的方式安装,推荐用 py36 版本。
    若已有 py3.6 或者用 conda 安装可以跳过这一步。

    cd $HOME curl -Lo https://www.python.org/ftp/python/3.6.14/Python-3.6.14.tar.xz tar xJvf Python-3.6.14.tar.xz cd Python-3.6.14 install -dv $HOME/.local/lib/python3.6 ./configure --prefix=$HOME/.local/lib/python3.6 make && make install # 添加环境变量 install -dv $HOME/.local/bin/ ln -s $HOME/.local/lib/python3.6/bin/python3.6 $HOME/.local/bin/python36 # 检测是否成功 python36 -V # Python 3.6.14 # 安装成功后移除安装包 rm -rf Python-3.6.14/ Python-3.6.14.tar.xz
  2. pdm 配置

    仍推荐直接用 conda,用 pdm 多半是为了节省硬盘。pdm 安装和使用可以参考 pdm 简易使用说明pdm 官方手册

    自行添加需要的依赖。注意,因为使用 py3.6,所以 py 模块的编译使用的是 flit_core, 而非 pdm 默认的 pdm.pep517.api

    install -dv PDM-Project/tensorflow-gpu cd PDM-Project/tensorflow-gpu # 生成PDM配置文件 cat <<'EOF' | tee pyproject.toml [project] name = "" version = "" description = "" authors = [ {name = "your_name", email = "your_email"}, ] dependencies = [ "tensorflow-directml==1.15.8", "matplotlib==3.3.4", "jupyter==1.0.0", "scipy==1.5.4", ] license = {text = "MIT"} requires-python = ">=3.6.2" [tool.pdm] [tool.pdm.dev-dependencies] lint = [ "flake8", "black" ] [[tool.pdm.source]] url = "https://mirrors.aliyun.com/pypi/simple/" verify_ssl = true name = "pypi" [build-system] requires = ["flit_core >=3.2,<4"] build-backend = "flit_core.buildapi" 'EOF'

    然后选择 py 版本,并下载依赖包。

    # 选择对应的python36版本 ➜ pdm use Please enter the Python interpreter to use 0. /home/bingo/.local/pipx/venvs/pdm/bin/python (3.8) 1. /usr/bin/python3.8 (3.8) 2. /home/bingo/.local/bin/python37 (3.7) 3. /home/bingo/.local/bin/python36 (3.6) Please select (0): 3 Using Python interpreter: /home/bingo/.local/bin/python36 (3.6) # 下载依赖 ➜ pdm update --save-compatible
  3. 结合 vscode python 工作区使用

    vscode python 插件从 2022.10.0 开始不再支持 py36debug,要回滚至 v2022.8.1

    1. 创建 python 工作区,添加 python 相关开发的插件。vscode 配置、调试 python 的已经有很多教程了,自行百度。

    2. 将 PDM-Project 添加至工作区,方便后面复制 Path

    3. 将需要写的项目添加至工作区

    4. 在项目 .vscode 目录下添加 settings.json 文件(第一步的配置应该在工作区,这一步的配置只对项目生效),添加 pylance 的 extra 路径配置。(如果不配置,pylance 插件会提示缺少模块文件,以及没有对应的代码补全)

      // settings.json // 根据自己的PDM-Project/tensorflow-gpu库和py36路径调整 { "python.autoComplete.extraPaths": [ "your_path/PDM-Project/tensorflow-gpu/__pypackages__/3.6/lib" ], "python.analysis.extraPaths": [ "your_path/PDM-Project/tensorflow-gpu/__pypackages__/3.6/lib" ], "python.analysis.autoSearchPaths": true, "python.defaultInterpreterPath": "your_py36Path", "python.envFile": "${workspaceFolder}/.env", }
    5. 在项目 .vscode 目录下添加 .env 文件,这样子 launchF5 的时候可以关联 python.analysis.extraPaths 声明的目录到 PYTHONPATH 变量。根据实际路径调整

      PYTHONPATH=your_path/PDM-Project/tensorflow-gpu/__pypackages__/3.6/lib

      不推荐在 .vsocode/launch.json 中添加 env,因为对 vscode-jupyter 不生效。

    6. 测试是否使用显卡(请务必用 vscode 的 luanch 运行,不然是无法链接到 python.analysis.extraPaths

      import tensorflow as tf tf.test.is_gpu_available() print(tf.test.is_gpu_available(cuda_only=False)) # output DirectML device enumeration: found 1 compatible adapters. DirectML: creating device on adapter 0 (AMD Radeon(TM) Graphics True

  性能就不测试了,只能说比用 cpu 快那么一丢丢。

  ‍

注意事项

  1. 安装 amd 显卡驱动后,待机时 cpu 负载异常

    86c37d7d3fa5747ff790abd5db0644b.jpg
    在 WMI 错误事件中锁定 pid 号

    2491dfcd6d6c7e6feeddb3730aef2f2.jpg

    5cd3cec5e597f70217fbd5ff01228d5.jpg这是因为勾选了 amd 的匿名信息收集(AMD User Experience Program),在 amd 的驱动程序中关闭收集就好了。

  ‍

为什么使用 pdm?

  1. 节约空间,因为经常要从网上下载库,总会需要添加环境。如果是用 conda 的环境管理,每创建一个虚拟环境就会多拷贝一份 python 二进制文件、标准库。以及在多数项目中存在相同依赖包,在虚拟环境中,都是存在冗余的。

    pdm 并不创建虚拟环境(除了 pdm 运行本身会创建虚拟环境),并且模块库是通过 PEP582 本地链接的方式,可以极大节省硬盘空间(需要开启配置 install.cache = True install.cache_method = symlink)。(主要是我的 wsl2 装在固态硬盘上,能省则省)

    # 可以看到下载的模块文件基本都是软连接ls -al your_path/PDM-Project/tensorflow-gpu/__pypackages__/3.6/lib # 使用pdm后,依赖包的总空间占用大小du -sh ~/codeEnv/pyCache/packages/ 1.4G /home/bingo/codeEnv/pyCache/packages/
  2. 有没有好方法复用当前配置好的项目开发环境?

    pdm2.0 推出了虚拟环境(本质上还是基于 virtualenv/venv/conda),我并不是很推荐这个。如果没有更改依赖的话,推荐将配置好的 .vscode 目录和 .env 目录拷贝到 PDM-Project 对应的项目目录下。后续要复用直接将这两个 copy 到新的项目目录下即可。

  image.png

  ‍

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 674 回帖
  • DirectML
    1 引用
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    53 引用 • 40 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    132 引用 • 1115 回帖 • 119 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 679 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 2 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 105 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 787 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 528 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 175 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 458 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 79 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 393 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 399 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 488 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖 • 1 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    226 引用 • 476 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 617 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 650 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 1 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • sts
    2 引用 • 2 回帖 • 224 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    946 引用 • 1460 回帖
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 512 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 5 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注