NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

百度开源其人工智能系统:Warp-CTC

  • 2016-01-19
  • 本文字数:2134 字

    阅读完需:约 7 分钟

近日,百度位于硅谷的人工智能实验室(SVAIL)开源了其核心的人工智能系统:Warp-CTC,该系统是一种在 CPU 和 GPU 上快速的 CTC 的并行实现。这项举动举动对于促进机器学习、人工智能领域的技术研究与发展与有重要意义。Warp-CTC 可用于解决比如语音识别这样的,将输入序列映射到输出序列的监督问题。基于 Apache 协议,WARP-CTC 的 C 语言库和可选 Torch 绑定都已托管到 GitHub:

https://github.com/baidu-research/warp-ctc

简介

许多现实世界的序列学习任务都要求从嘈杂的、不分段的输入数据中进行标签序列的预测。例如语音识别中,声音信号就被转化成语句或单词。递归神经网络(RNN)对于这样的任务来说是有力的序列训练方法,然而由于 RNN 需要预分段的训练数据,以及需要后处理才能将输出数据转化成标签序列,因此 RNN 的性能受到了限制。Warp-CTC 使用了 Connectionist Temporal Classification 的方法,该方法可以直接训练 RNN 来标记未分段序列,从而规避上述问题。Connectionist Temporal Classification 是一种损失函数,用于执行针对序列数据的监督学习,不需要输入数据和标签之间进行对应。举例来说,CTC 可以用于训练语音识别中端对端系统,而这项技术在百度硅谷人工智能实验室中早已开始使用了。

上图显示了 CTC 计算出输出序列“THE CAT”的可能性概率,考虑到由于标签可能延伸若干个输入数据的时间步长而导致标签被复制(用图像底部的光谱来表示),上图结果是所有输入序列可能映射到“THE CAT”上的比对总和。计算这些概率的总和由于涉及到组合学,显然是十分耗费时间和运算成本的,但是 CTC 利用动态编程极大地降低了运算成本。因为 CTC 是可微分的方程,它可用于深度神经网络的标准 SGD 训练。

百度实验室聚焦于扩展递归神经网络,CTC 损失就是一个十分重要的组成部分。为了使整个系统有效运行,百度将整个 CTC 算法并行化处理。该项目包含了百度的高性能 CPU 以及 CTC 损失的 CUDA 版本,并绑定了 Torch。代码库中提供了简单了 C 语言界面,以便于更好地融合深度学习框架。

这一实例通过执行更快地并行调度,极大地改进了性能,改善了训练的可扩展性。对于聚焦于 GPU 的训练管道来说,将数据本地化放置于 GPU 内存中可以用互联带宽增加数据的并行性。

性能

相对于其它公共开放的实例来说,Warp-CTC 要高效得多。该项目在编写时也是尽可能做到数值稳定。该算法对于数值十分敏感,甚至在内存消耗的多得多的单精度浮点运算当中,对于 Log 运算,其数值也是相当稳定。除了机器指令,此外还需要对于多重超越函数的评价。正因为如此,这些 CTC 实例的仅当使用相同方式计算时才能相互比较。

百度将 Warp-CTC 与运行在 Theano 上的 CTC 实例:Eesen,以及仅适用于 Cython CPU 的实例 Stanford-CTC 进行过比较。百度参照了 Theano 在 32 位浮点数字环境下进行 Log 运算,目的是与其它百度相比较的实例进行匹配。他们还将 Stanford-CTC 进行了改良,以便于在 Log 空间下进行运算,但是 Stanford-CTC 也不支持大于 1 的 minibatch。所以百度需要一个训练管道中更加庞大的内存布局,他们假设随着 minibatch 尺寸的增加,内存消耗是线性递增的。

百度将与英文和中文端对端模型(end-to-end model)相关的两个问题尺寸的结果分别展示了出来,在这里 T 代表了输入 CTC 的时间步长的数目,L 代表了每个 example 的长度,A 代表了字母的大小。

在 GPU 上,每 64 个 example 的 minibatch 的表现都在比 Eesen 快 7 倍和快 155 倍、比 Theano 实例快 46 倍和快 68 倍的范围之间波动。

GPU 表现

基于单 NVIDIA Titan X GPU

CPU 表现

基于两个 Intel E5-2660 v3 处理器的双卡插槽机器,Warp-CTC 用了 40 个线程去充分利用 CPU 资源,Eesen 没有提供 CPU 实例,Theano 实例没有进行跨多线程并行计算,Stanford-CTC 并未提供跨线程并行计算的机制。

接口

接口在 _include/ctc.h_ 里面,它支持 CPU 或 GPU 执行。如果运行在 CPU 上,你可以指定 OpenMP 并行;或者如果运行在 GPU 上,你可以指定 CUDA 流。百度针对该项目进行了设置,确保代码库不会在内部进行内存分配,目的在于避免由内存分配导致的同步和开销(synchronizations and overheads)。

编译

目前,Warp-CTC 已在 Ubuntu 14.04 和 OSX 10.10 上进行过测试,Windows 目前暂不支持。

首先获取以下代码:

复制代码
git clone https://github.com/baidu-research/warp-ctc.git
cd warp-ctc

创建一个目录

复制代码
mkdir build
cd build

如果你安装了非标准的 CUDA,则

export CUDA_BIN_PATH=/path_to_cuda以便于 CMake 可以检测到 CUDA,并且确保 Torch 也被检测到,确保 _th_ 在 _$PATH_ 里面。

运行 cmake 并创建

复制代码
cmake ../
make

C 代码库和 Torch 共享库会随着测试的可执行文件一同被创建。如果 CUDA 被检测到,那么 _test_gpu_ 就会被创建;_test_cpu_ 无论何种情况都会被创建。

测试

为了运行该项测试,对于 OSX 系统来说,百度确保了 CUDA 库在 _LD_LIBRARY_PATH (DYLD_LIBRARY_PATH_。Torch 测试必须从 _torch_binding/tests/_ 库中运行。

Torch 安装

luarocks make torch_binding/rocks/warp-ctc-scm-1.rockspec我们也可以不克隆存储库来进行安装。

luarocks install http://raw.githubusercontent.com/baidu-research/warp-ctc/master/torch_binding/rocks/warp-ctc-scm-1.rockspec

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2016-01-19 22:2910821

评论

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

NFT市场格局仍未变化,Okaleido能否掀起新一轮波澜?

西柚子

EMQ宣布赞助Erlang生态系统基金会(EEF),加速推动Erlang技术在全球的蓬勃发展

EMQ映云科技

erlang 物联网 IoT emqx 7月月更

ppdai站点登录参数加密解析,最短的文章,最棒的案例 com

梦想橡皮擦

Python 爬虫 7月月更

《黑客与画家》作者:18 个会杀死初创公司的错误

雨果

创业者

Qt|使用Http通讯下载文件

中国好公民st

HTTP qt 7月月更

Kubernetes资源编排系列之二: Helm篇

阿里云大数据AI技术

运维

C# 使用ListView控件实现文件查看大图标小图标,详细信息效果。

IC00

C# 7月月更

ID生成器

ES_her0

7月月更

如何判断透明LED显示屏质量优劣

Dylan

LED显示屏 led显示屏厂家

重新认识生命世界,也重新认识我们自己

图灵教育

科普

静态成员函数访问非静态数据成员【C++】

攻城狮杰森

c++ 7月月更

LeetCode-104. 二叉树的最大深度(java)

bug菌

Leet Code 7月月更

ABAP-OOALV实现

桥下本有油菜花

SAP abap

【LeetCode】 数组嵌套Java题解

Albert

LeetCode 7月月更

零信任架构的实施规划——针对联邦系统管理员的规划指南

权说安全

即刻报名|前沿技术探索:如何让 Spark 更强劲、更灵活

Kyligence

spark 开源

龙蜥开发者说:社区首个支持 LoongArch架构的操作系统构建之路 | 第 9 期

OpenAnolis小助手

开源 操作系统 龙蜥开发者说 龙芯 LoongArch 架构

java零基础入门-File类(概念篇)

喵手

Java 7月月更

中原银行代码智能重构实践

中原银行

生产力 插件 代码重构 中原银行 智能重构

CSS重复线性渐变之画格子

南城FE

CSS 前端 7月月更

异想天开 | 假如用中文写代码,是一种什么体验?

雨果

程序员 开发者

Qt | Qt Creator功能

YOLO.

qt 7月月更

GPS原始坐标转百度地图坐标(纯C代码)

DS小龙哥

7月月更

语音质量监控

Damon

7月月更

CRMEB 多商户这些功能,你都用过吗?

CRMEB

mysql进阶(九)多表查询

No Silver Bullet

MySQL 多表查询 7月月更

采用Dubbo?还是Spring Cloud?

博文视点Broadview

OpenHarmony littlefs文件系统存储结构与IO性能优化分析

OpenHarmony开发者

OpenHarmony

Kyligence 正式支持 Amazon EMR Serverless,构建高效低成本云上数据分析

Kyligence

Cloud Kyligence Amazon EMR

直播系统源码——短视频直播系统源码

开源直播系统源码

软件开发 直播系统 开源源码 短视频直播源码

去哪儿旅行海量指标数据采集与存储

Qunar技术沙龙

百度开源其人工智能系统:Warp-CTC_百度_董志南_InfoQ精选文章