外观
用 GPU 加速 t-SNE
Accelerate tSNE with GPU

Sklearn 的实现由 NumPy 驱动,通常只在 CPU 的单核上运行。因此,运行并行化操作的能力有时相当有限。
另一个主要限制是,scikit-learn 的模型无法在 GPU 上运行。

这个瓶颈为运行时间的改进留下了巨大的空间。t-SNE 算法也是如此,它是最强大的、用于可视化高维数据集的降维技术之一。


因为 t-SNE 最大的问题在于它的运行时间与数据点数量呈平方级关系。
因此,比如说超过 2 万到 2.5 万个数据点之后,使用 Sklearn 实现的 t-SNE 就变得相当困难了。有两种方法可以应对:
- 要么继续等。
- 要么使用那些可能可以用 GPU 加速的优化实现。我在一个项目中就因为同样的问题卡住了,后来找到了一个相当好用的解决方案。tSNE-CUDA 是 t-SNE 算法的一个优化 CUDA 版本,顾名思义,它可以利用硬件加速器。因此,相对于标准的 Sklearn 实现,它能提供巨大的加速:

如上所示,这个 GPU 加速的实现:
- 比 Sklearn 实现快 33 倍。
- 产生与 Sklearn 实现质量相近的聚类(clustering)。
请注意,这个实现只支持 2 维,也就是说,你只能投影到二维。根据文档,作者没有计划支持更多维度,因为那需要对代码做重大改动。但在我看来,这并不重要,因为在超过 99% 的情况下,t-SNE 都是用来获取二维投影的。所以这里没什么问题。在结束本章之前,我还发现了作者给出的如下基准测试结果:

它表明,在 CIFAR-10 训练集(5 万张图像)上,tSNE-CUDA 比 Sklearn 快 700 倍,这是一个惊人的加速。这是我的 Colab notebook,供你入门使用:https://bit.ly/3WdEone。