Debian环境中,深度学习框架打包有哪些难点?

作者:Mo Zhou

2019 年 6 月 09 日

Debian环境中,深度学习框架打包有哪些难点?

作者在重新评估 TensorFlow 的最近版本的状态之后,写了本文分享他关于深度学习框架打包的一些观点。作者的想法是从失败而不是成功中总结出来的,也就是说,作者总结的这些观点应该对将来想要维护类似包[1]的维护者有所帮助。


在 Debian 的环境中,维护者必须面对这三个障碍:


  1. 许可证。不幸的是,事实上占主导地位的性能库是 cuDNN[3]。我想说,没有一个真正的用户 [4] 会去使用不带 cuDNN 或 TPU[5] 加速的深度学习框架。在 Debian 中,维持一堆贡献软件(contrib)或非自由软件并不是什么好经验。在 Salsa:nvidia-team 使用 cuDNN 打包是可行的,但是上传计划已经流产,因为它的许可证看起来太可怕了。

  2. ISA 基线。如果你还记得 SIMDebian[6],或者我使用 DUPR[2] 的一些动机,那么你就会很容易理解 SIMD 代码的缺失将会如何影响关键的计算性能。人们在这方面提供了一些有用的建议,包括 ld.so 技巧和一些 gcc 特性,这些特性允许根据 CPU 能力 [8] 选择运行时代码。ld.so[7] 技巧会使得到的.deb 包膨胀,但它却是最适用的解决方案。相比之下,修补一百万行 TensorFlow 代码来启用“函数属性”特性对志愿者来说有点是天方夜谭的事。

  3. 构建系统。看看 TensorFlow 和 PyTorch[10] 的构建系统。由于发展速度过快,它们很不稳定。具体而言,TensorFlow 的构建系统“bazel”对 Debian 来说,打包很难,而且仍然需要大量的修补工作来阻止构建 TensorFlow 之前,bazel 需要下载大约 3GB 不知干嘛用的数据[9]。PyTorch 的构建系统 “setup.py+cmake+shell”……也需要一些修补工作。


因此,我建议任何准备处理任何深度学习包的贡献者要仔细评估我上面提到的这三个方面。在一定程度上,我很羡慕其他发行版,如 Arch 和 Gentoo,因为它们在这一领域取得了很大的进步。


那时候(也许就几个月前?),在 Debian 科学团队中,我说要终止深度学习框架相关的开发。之后 Paul Liu 找我询问了关于 src:tensorflow(实验中)的状态。我花了几个小时重新评估形势,最后决定完全放弃,并写下了本文上述几个观点。因为我不愿意再承担任何工作量了。与此同时,我针对 tensorflow 和它的几个依赖项提交了 Orphan[11] 的 bug,但 src:nsync 除外,它包含一组简洁的 cmake 文件。我计划一年后把这些 Orphan bug 转换成 RM bug,如果没有人去碰它们的话。


我使用神经网络进行研究,并经常使用这些框架。Anadonda 和 Pip 对我来说已经足够好了,所以如果我想要一些.deb 包的话,DUPR[2] 对我来说是最好的选择。


这一次,我真的放弃了所有相关的努力 [12],永远也不会再次触碰它们了。对此,我并不会感到遗憾,即使这些观点与我的一些 Debian 活动紧密相关。


这个结果确实看起来听糟糕的,但我们相信,太阳每一天都是新的。


[1] 请特别注意计算性能。


[2] https://github.com/dupr/duprkit


[3] (非自由软件) https://developer.nvidia.com/cudnn


[4] 商业团队,研究人员。


[5] Google 的计算加速硬件


[6] https://github.com/SIMDebian/SIMDebian


[7] man ld.so ->搜索“硬件能力”(hardware capabilities)。


[8] info gcc“函数属性”(Function Attributes):见 Guillem 的最近回复“SIMDebian:……”(d-devel@l.d.o)


[9] 我不清楚它们是什么,它们不仅仅是构建版本。


[10] 它们是最重要的两个框架。


[11] 终于解脱了。


[12] 不包含我正进行的关于 intel-mkl/BLAS/LAPACK 的工作。我仍然对 Debian 开发的许多其他方面有着浓厚的兴趣。


2019 年 6 月 09 日 08:006187
用户头像

发布了 324 篇内容, 共 119.8 次阅读, 收获喜欢 800 次。

关注

评论

发布
暂无评论
发现更多内容

算法:时间复杂度和空间复杂度

shirley

算法 时间复杂度

Yii2.0 RESTful API 认证教程

Middleware

php RESTful Yii2

变则通,通则久 —— 读《谁动了我的奶酪?》

YoungZY

读书 读书感悟

2020年全球经济萎缩,飞链热交易所逆袭而来闪耀数字经济

极客编

到底谁是你老板

Neco.W

工作 创业心态

运维与云

yann [扬] :曹同学

JVM最佳学习笔记<四>---虚拟机类加载机制

Loubobooo

Java JVM

JVM最佳学习笔记---总览

Loubobooo

Java JVM

JVM最佳学习笔记<三>---虚拟机性能监控与故障处理工具

Loubobooo

Java JVM

这个开源神器可快速帮你安装 MacOS 虚拟机!

JackTian

macos GitHub Linux 操作系统 虚拟机

Linux 终端下记不住命令的使用方法?这个开源项目帮你解决。

JackTian

Linux 运维 操作系统 命令 开源项目

眼前搁座金山也看不见

池建强

搜索引擎 学习

JavaScript 基础拾遗 —— this 的前世今生

吴昊泉

Java 学习 前端

DevOps知识点——3C知多少

DevOps 测试 持续集成

AutoConfigurationImportSelector到底怎么初始化

编号94530

Java spring Spring Boot import

如何成为高手: 到知识的源头去

lmymirror

学习 方法论 高手

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (九)测试驱动开发(TDD)

编程道与术

Java 编程 软件测试 TDD 单元测试

这么多年了,QQ没发现这个问题吗?

BabyKing

zabbix 实战指南(2)

橙子冰

zabbix

七年老程序员面试经历

代码诗人

ESP8266远程控制+MicroPython 固件初体验

黄耗子皮

物联网 esp8266

将footer固定在底部: Flexbox vs Grid

寇云

CSS css3

运维那点事 - jenkins流水线

yann [扬] :曹同学

JVM最佳学习笔记<一>---Java内存区域与内存溢出异常

Loubobooo

Java JVM

JVM最佳学习笔记<二>---垃圾收集器与内存分配策略

Loubobooo

Java JVM

Yii2.0 RESTful API 之版本控制

Middleware

php RESTful Yii2

如何用五步建设数据中台?

博文视点Broadview

大数据 数据中台 架构 中台

OAM v1alpha2 新版:平衡标准与可扩展性

孙健波

钱从哪里来 - 中国家庭的财富方案

石云升

读书笔记 工作 财富 买房 资产配置

Yii2.0 RESTful API 基础配置教程

Middleware

php RESTful Yii2

Python 沙盒环境配置

黄耗子皮

Debian环境中,深度学习框架打包有哪些难点?-InfoQ