带GPU的UMAP

gpumap的Python项目详细描述


GPU并行一致流形逼近和投影(GMPUAP)是 可以使用的umap降维技术的gpu端口版本 用于类似于t-sne的可视化,但也用于一般非线性维度 减少。

目前只支持支持支持CUDA的GPU。由于依赖于 faiss目前只支持linux(可能还有macos)平台。

有关umap的更多信息,请参见原始实现 https://github.com/lmcinnes/umap/

如何使用gpumap

gpumap包继承自sklearn类,因此可以方便地插入 旁边的其他sklearn转换器具有相同的调用api。

importgpumapfromsklearn.datasetsimportload_digitsdigits=load_digits()embedding=gpumap.GPUMAP().fit_transform(digits.data)

可以为gpumap类设置多个参数; 主要有以下几点:

  • ^{tt1}$: This determines the number of neighboring points used in local approximations of manifold structure. Larger values will result in more global structure being preserved at the loss of detailed local structure. In general this parameter should often be in the range 5 to 50, with a choice of 10 to 15 being a sensible default.
  • ^{tt2}$: This controls how tightly the embedding is allowed compress points together. Larger values ensure embedded points are more evenly distributed, while smaller values allow the algorithm to optimise more accurately with regard to local structure. Sensible values are in the range 0.001 to 0.5, with 0.1 being a reasonable default.

支持metric参数以保持接口与umap对齐, 但是,将其设置为除“eucliden”之外的任何值都将返回到序列 版本。也不支持处理稀疏矩阵,并且将类似地 对于算法的某些部分,导致回退到顺序版本。

性能和示例

gpumap和umap一样,在嵌入大的高维数据时非常有效 数据集。尤其是它在输入维和嵌入两个方面都有很好的伸缩性 尺寸。性能在很大程度上取决于使用的GPU。为了一个问题 例如784维mnist数字数据集,包含70000个数据样本,gpumap 使用(过时的)nvidia gtx可以在30秒内完成嵌入 745显卡。更新的硬件将相应地扩展。尽管如此 运行时效率umap仍然可以生成高质量的嵌入。

必要的mnist数字数据集,使用3.6ghz在29秒内嵌入 英特尔酷睿i7处理器和nvidia gtx 745 gpu(n_neighbors=10, 最小距离=0.001):

GPUMAP embedding of MNIST digits

然而,mnist digits数据集相当简单。更好的测试是 最新的“时尚mnist”时尚产品图片集(再次 784维70000个数据样本)。gpumap公司 准确地在2分钟内生成此嵌入(n_neighbors=5,min_dist=0.1):

GPUMAP embedding of "Fashion MNIST"

安装

gpumap与umap具有相同的依赖关系,即scikit-learnnumpyscipynumba。gpumap添加了对faiss执行的要求 GPU上的近邻搜索。

要求:

  • SCIKIT学习
  • (纽比)
  • (scipy)
  • numba
  • 费斯

安装选项

gpumap可以通过conda、pypi或从源安装:

选项1:conda

如果需要,请设置新的conda环境。

conda create -n env

conda activate env

conda install python

安装依赖项:numba和faiss

conda install numba
conda install scikit-learn

conda install faiss-gpu cudatoolkit=10.0 -c pytorch # For CUDA10
# For older CUDA versions:
# conda install faiss-gpu cudatoolkit=8.0 -c pytorch # For CUDA8
# conda install faiss-gpu cudatoolkit=9.0 -c pytorch # For CUDA9

conda install -c conda-forge gpumap

选项2:pypi

gpumap也可以作为pypi包提供。

pip install scikit-learn numba faiss gpumap

注意,预先构建的faiss库没有得到上游的官方支持。

选项3:构建

从源代码构建很容易,克隆存储库或将代码放到 以其他方式运行计算机,并使用以下命令运行安装程序:

python setup.py install

请注意,依赖项需要预先安装。这些是 faiss https://github.com/facebook research/faiss/blob/master/install.md library和numba http://numba.pydata.org/numba doc/latest/user/installing.html。

许可证

gpumap包基于umap包,因此也是3子句bsd 得到许可的。

贡献

我们欢迎您的贡献!滚开!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法设置@Async方法   在Java中设置链表   未设置id时遇到java StaleObjectStateException   java如何保存程序的状态并加载它?   java映射类和schemaderived类之间有什么区别?   控制器类中的java全局变量在最新会话打开时被覆盖   java Hystrix和连接池   java Sonar在我不关闭ignite对象时引发拦截器问题   java无法在Junit TestCase中为控制器设置Mockito值   java保证异步传递消息   java如何高亮显示按钮,直到为微调器提供有效值?   java在Android中使用ImageView控件创建错误   JMX垃圾收集和系统之间的java差异。gc()?   java在尝试向标记添加信息窗口时卡住了?   java JavaFX检测与后台的冲突   java将光标放在按钮上时更改按钮的位置   java Maven。如何从paren pom继承配置文件。xml?   带空格的Java填充字符串   java将两个对象设置为相等,并找到其布尔结果