python - Tensorflow Queue 会加速单 CPU 机器上的数据加载吗?
问题描述
我目前有一些在 GPU 上运行良好的现有代码。我尝试在具有单个 GPU 的 Ubuntu 机器和具有多个 GPU 的集群服务器上运行它。这两个实验都非常快。
但是,当我尝试在自己的笔记本电脑上使用一个 CPU(无 GPU)运行它时,它变得非常低……慢了 100 倍以上。
我知道当我没有用于训练的 GPU 时它会慢得多。但我真的希望了解“队列”是否受到这种硬件平台差异的影响。
通常情况下,我们使用 CPU 通过“队列”将数据加载到 GPU,但使用单个 CPU 并使用 Tensorflow 队列没有任何意义。任何人都可以为我提供任何指导吗?
解决方案
如果 CPU 具有多个内核,此建议可能会帮助您有效使用 CPU。
为了获得更好的性能,需要根据可用的物理核心数设置几个参数,包括 OMP_NUM_THREADS、亲和域等。
您可以尝试以下有助于更好地利用处理器的优化步骤。
export OMP_NUM_THREADS=NUM_PARALLEL_EXEC_UNITS
export KMP_BLOCKTIME=30
export KMP_SETTINGS=1
export KMP_AFFINITY=granularity=fine,verbose,compact,1,0
NUM_PARALLEL_EXEC_UNITS 是物理内核的数量。
当 NUM_PARALLEL_EXEC_UNITS 等于物理内核数时,性能会更好。但这可能会有所不同。您可以尝试不同的值来选择最佳值。
推荐阅读
- django - 如何在 django 中默认设置用户为员工
- apache-spark - 将环境变量传递给 YARN 容器
- graphql - 是否可以根据条件返回 GraphQL 中的字段?
- exchange-server - 使用 EWS 检索所有 Exchange 联系人(全局地址列表和用户联系人文件夹)
- maven - Jenkins 插件开发:使用哪个版本的依赖项?
- ag-grid - Ag-Grid 详细(子)网格未导出
- android - 更新数据库时如何从 Firebase 发送电子邮件通知
- java - 使用 IntelliJ IDEA 从 XSD 生成 SOAP Java 类
- python-3.x - 检查当前日期的日志脚本
- c# - 试图从 PropertyInfo 获取泛型类型