0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

RAPID可能帶來的性能提升的重要性

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

HDBSCAN 是一種最先進的基于密度的 聚類算法,已在主題建模、基因組學和地理空間分析等領域流行。

RAPIDS cuML 自 2021 10 月 21.10 發(fā)布以來,提供了加速 HDBSCAN ,詳見 GPU-Accelerated Hierarchical DBSCAN with RAPIDS cuML – Let’s Get Back To The Future 。然而,不包括對 軟聚類(也稱為模糊聚類)的支持。使用軟聚類,為每個點創(chuàng)建值向量(而不是單個聚類標簽),表示該點是每個聚類成員的概率。

CPU 上執(zhí)行 HDBSCAN 軟群集速度緩慢。由于繁重的計算負擔,中型數(shù)據(jù)集可能需要數(shù)小時甚至數(shù)天的時間?,F(xiàn)在,在 22.10 RAPIDS release 中, cuML 為 HDBSCAN 提供了加速的軟聚類,使該技術(shù)能夠在大型數(shù)據(jù)集上使用。

這篇文章強調(diào)了使用軟聚類來更好地捕捉下游分析中的細微差別以及 RAPID 可能帶來的性能提升的重要性。在文檔聚類示例中,在 CPU 上花費數(shù)小時的軟聚類可以在 GPU 上使用 cuML 在幾秒內(nèi)完成。

軟聚類代碼

在基于 CPU 的 scikit-learn-contrib/hdbscan library 中,軟集群通過 all_points_membership_vectors 頂級模塊功能可用。

cuML 與此 API 匹配:

import cuml

blobs, labels = cuml.datasets.make_blobs(n_samples=2000, n_features=10, random_state=12)

clusterer = cuml.cluster.hdbscan.HDBSCAN(prediction_data=True)
clusterer.fit(blobs)
cuml.cluster.hdbscan.all_points_membership_vectors(clusterer)

為什么選擇軟群集

在許多聚類算法中,數(shù)據(jù)集中的每個記錄要么被分配給單個聚類,要么被認為是噪聲,而不被分配給任何聚類。然而,在現(xiàn)實世界中,許多記錄并不完全適合一個集群。 HDBSCAN 通過表示每個點屬于每個集群的程度來提供軟集群機制,從而承認了這一現(xiàn)實。這類似于其他算法,例如混合模型和模糊 c 均值。

想象一篇關于體育主題音樂劇的新聞文章。如果你想將文章分配給一個集群,它是屬于體育集群還是音樂集群?也許是專門為體育主題音樂劇打造的一個較小的集群?或者它應該在兩個集群中都有一定程度的成員資格?

通過強制選擇一個標簽,這種細微差別就消失了,當聚類結(jié)果用于下游分析或行動時,這種差別可能會很重要。如果只指定了一個體育標簽,那么推薦系統(tǒng)是否會將文章呈現(xiàn)給同樣對音樂劇感興趣的讀者?那么反過來呢(讀者對其中一個感興趣,但對另一個不感興趣)?對這兩個主題中的一個或兩個感興趣的讀者來說,這篇文章應該是潛在的。

軟集群解決了這個問題,它支持基于每個類別的閾值的操作,并創(chuàng)建提供更好體驗的應用程序。

文檔聚類示例

您可以使用文檔集群來衡量 cuML 加速軟集群的潛在實際性能優(yōu)勢和影響。

許多現(xiàn)代文檔群集工作流由以下步驟組成:

將每個文檔轉(zhuǎn)換為數(shù)字表示(通常使用神經(jīng)網(wǎng)絡嵌入)

降低數(shù)字轉(zhuǎn)換文檔的維數(shù)

對降維數(shù)據(jù)集執(zhí)行聚類

根據(jù)結(jié)果采取行動

如果您想在系統(tǒng)上運行工作流,可以通過訪問 GitHub 上的 hdbscan-blog.ipynb 獲得 Jupyter 筆記本。

準備數(shù)據(jù)集

本例使用 Kaggle 的 A Million News Headlines 數(shù)據(jù)集,其中包含來自澳大利亞廣播公司的 100 多萬條新聞標題。

下載數(shù)據(jù)集后,將每個標題轉(zhuǎn)換為嵌入向量。為此,使用 Sentence Transformers library 中的全 MiniLM-L6-v2 神經(jīng)網(wǎng)絡。請注意,稍后將使用導入的其他一些庫。

import numpy as np
import pandas as pd
import cuml
from sentence_transformers import SentenceTransformer

N_HEADLINES = 10000

model = SentenceTransformer('all-MiniLM-L6-v2')

df = pd.read_csv("/path/to/million-headlines.zip")
embeddings = model.encode(df.headline_text[:N_HEADLINES])

降低維度

嵌入就緒后,使用 cuML 的 UMAP 將維度降到五個特征。本示例僅使用 10000 條記錄,作為指南。

為了再現(xiàn)性,設置random_state。在您的計算機上運行時,此工作流中的結(jié)果可能略有不同,具體取決于 UMAP 結(jié)果。

umap = cuml.manifold.UMAP(n_components=5, n_neighbors=15, min_dist=0.0, random_state=12)
reduced_data = umap.fit_transform(embeddings)

軟聚類

接下來,在數(shù)據(jù)集上擬合 HDBSCAN 模型,并通過設置prediction_data=True啟用使用all_points_membership_vectors進行軟聚類。也設置min_cluster_size=50,這意味著少于 50 個標題的分組將被視為另一個集群(或噪聲)的一部分,而不是單獨的集群。

clusterer = cuml.cluster.hdbscan.HDBSCAN(min_cluster_size=50, metric='euclidean', prediction_data=True)
clusterer.fit(reduced_data)
soft_clusters = cuml.cluster.hdbscan.all_points_membership_vectors(clusterer)
soft_clusters[0]
array([0.01466704, 0.01035215, 0.0220814 , 0.01829496, 0.0127591 ,
       0.02333117, 0.01993877, 0.02453639, 0.03369896, 0.02514531,
       0.05555269, 0.04149485, 0.05131698, 0.02297594, 0.03559102,
       0.02765776, 0.04131499, 0.06404213, 0.01866449, 0.01557038,
       0.01696391], dtype=float32)

檢查兩個集群

在繼續(xù)之前,請查看指定的標簽( -1 表示噪聲)。很明顯,該數(shù)據(jù)中有相當多的集群:

pd.Series(clusterer.labels_).value_counts()
-1     3943
 3     1988
 5     1022
 20     682
 13     367
 7      210
 0      199
 2      192
 8      190
 16     177
 12     161
 17     143
 15     107
 19      86
 9       83
 11      70
 4       68
 18      66
 6       65
 10      61
 1       61
 14      59
dtype: int64

隨機選擇兩個簇,例如簇 7 和簇 10 ,并檢查每個簇中的幾個點。

df[:N_HEADLINES].loc[clusterer.labels_ == 7].headline_text.head()
572    man accused of selling bali bomb chemicals goe...
671      timor sea treaty will be ratfied shortly martin
678     us asks indonesia to improve human rights record
797           shop owner on trial accused over bali bomb
874    gatecrashers blamed for violence at bali thank...
Name: headline_text, dtype: object

df[:N_HEADLINES].loc[clusterer.labels_ == 10].headline_text.head()
40     direct anger at govt not soldiers crean urges
94                   mayor warns landfill protesters
334                    more anti war rallies planned
362     pm criticism of protesters disgraceful crean
363      pm defends criticism of anti war protesters
Name: headline_text, dtype: object

然后,使用軟聚類成員資格分數(shù)來找到一些點,這些點可能屬于這兩個聚類。根據(jù)軟聚類得分,確定每個點的前兩個聚類。通過過濾簇 7 和簇 10 的軟成員資格排除異常值,這兩個成員資格都按比例大于其他簇的成員資格:

df2 = pd.DataFrame(soft_clusters.argsort()[:,::-1][:,:2])
df2["sum"] = soft_clusters.sum(axis=1)
df2["cluster_7_ratio"] = soft_clusters[:,7] / df2["sum"]
df2["cluster_10_ratio"] = soft_clusters[:,10] / df2["sum"]
df2[(df2[0] == 7) & (df2[1] == 10) & (df2["cluster_7_ratio"] > 0.1) & (df2["cluster_10_ratio"] > 0.1)]

3824  7  10  0.630313         0.170000         0.160453
6405  7  10  0.695286         0.260162         0.119036

檢查這些要點的標題,注意它們都是關于印度尼西亞的,這也在第 7 組標題 678 (上圖)中。還要注意,這兩個標題都是關于反戰(zhàn)與和平的,這是 10 組標題中的幾個主題。

df[:N_HEADLINES].iloc[3824]
publish_date                                              20030309
headline_text    indonesians stage mass prayer against war in iraq
Name: 3824, dtype: object

df[:N_HEADLINES].iloc[6405]
publish_date                           20030322
headline_text    anti war fury sweeps indonesia
Name: 6405, dtype: object

為什么軟集群很重要

您應該有多自信這些結(jié)果屬于他們分配的集群,而不是另一個集群?如前所述,一些集群包含標題,這些標題有可能位于不同的集群中。

置信度可以通過計算每個點的前兩個聚類的成員概率之間的差異來部分量化,如 HDBSCAN 文檔中所述。本例排除了噪聲點,以說明這不僅發(fā)生在“噪聲”點上,還發(fā)生在那些分配的簇標簽上:

soft_non_noise = soft_clusters[clusterer.labels_ != -1]
probs_top2_non_noise = np.take_along_axis(soft_non_noise, soft_non_noise.argsort(), axis=1)[:, -2:]
diffs = np.diff(probs_top2_non_noise).ravel()

繪制直方圖和這些差異的經(jīng)驗累積分布函數(shù)表明,許多點接近于被分配不同的聚類標簽。事實上,大約 30% 的點的前兩個聚類成員概率在 0.2 以內(nèi)(圖 1 )。

soft-clustering.png 圖 1. 數(shù)據(jù)集的每個點的前兩個聚類的成員概率之間的差異的直方圖和經(jīng)驗累積分布函數(shù)( ecdf )

使用這些軟聚類概率,您可以將這種不確定性結(jié)合起來,構(gòu)建更加健壯的機器學習管道和應用程序。

績效基準結(jié)果

接下來,在不同數(shù)量的新聞文章標題上運行前面的核心工作負載,從 25000 行到 400000 行不等。注意, HDBSCAN 參數(shù)可以針對更大的數(shù)據(jù)集進行調(diào)整。

在本例中, CPU 基準測試在 3.40 GHz 的 x86 Intel Xeon Gold 6128 CPU 上運行。 GPU 基準測試記錄在 NVIDIA Quadro RTX 8000 上,內(nèi)存為 48 GB 。

在 CPU (由 hdbscan 后端表示)上,軟集群性能隨著文檔數(shù)量的增加而松散地線性擴展。 50000 份文件耗時 50 秒; 100000 份文件耗時 500 秒; 200000 份文件耗時 5500 秒( 1.5 小時); 40 萬份文件耗時 6 萬秒( 17 小時)。詳見表 1 。

使用 cuML 中的 GPU 加速軟聚類, 40 萬個文檔的軟聚類可以在不到 2 秒的時間內(nèi)計算,而不是 17 小時。

Backend Number of Rows Soft Clustering Time (s)
cuml 25,000 0.008182
hdbscan 25,000 5.795254
cuml 50,000 0.014839
hdbscan 50,000 53.847145
cuml 100,000 0.077507
hdbscan 100,000 485.847746
cuml 200,000 0.322825
hdbscan 200,000 5503.697239
cuml 400,000 1.343359
hdbscan 400,000 62428.348942

表 1 。使用 cuML 和 CPU 后端運行 HDBSCAN all_points_membership_vectors所用的時間

如果您想在系統(tǒng)上運行此基準測試,請使用 benchmark-membership-vectors.py GitHub 要點。請注意,性能將根據(jù)所使用的 CPU 和 GPU 而變化。

關鍵要點

我們很高興報告這些業(yè)績。軟聚類可以有意義地改進機器學習支持的工作流。到目前為止,使用 HDBSCAN 這樣的集群技術(shù)在計算上對幾十萬條記錄都具有挑戰(zhàn)性。

隨著 HDBSCAN 軟聚類的加入, RAPIDS 和 cuML 繼續(xù)突破障礙,使最先進的計算技術(shù)在規(guī)模上更易于使用。

要開始使用 cuML ,請訪問 RAPIDS 入門頁面,其中提供了 conda 包、 pip 包和 Docker 容器。 cuML 也可以在 NVIDIA NGC 上的 NVIDIA optimized PyTorch 和 Tensorflow Docker 容器中使用,這使得端到端工作流更加簡單。

致謝

這篇文章描述了 Tarang Jain 在 Corey Nolet 指導下在 NVIDIA 實習期間提供的 cuML 功能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    4862

    瀏覽量

    102726
  • AI
    AI
    +關注

    關注

    87

    文章

    29889

    瀏覽量

    268175
收藏 人收藏

    評論

    相關推薦

    求助,ADC接地的重要性

    ADC接地的重要性
    發(fā)表于 06-04 07:56

    數(shù)據(jù)為智能帶來重要性!

    ,未來智能家電什么樣?從實用來看,智能家電將會給消費者帶來什么?智能家電產(chǎn)業(yè)正面臨哪些機遇?未來智能家電什么樣“您已經(jīng)有一個星期沒吃雞蛋了,讓我們早上吃一次雞蛋吧?”就在不遠的未來,您的冰箱可能會在每天
    發(fā)表于 09-23 21:02

    BGA焊接溫度控制重要性

    `請問BGA焊接溫度控制重要性有哪些?`
    發(fā)表于 03-26 16:41

    Syncer模塊的重要性是什么?

    我在我的項目中使用25G以太網(wǎng)IP。通過打開此IP的示例設計,我們可以看到許多SYNCER模塊,一個FSM模塊和一個流量生成器模塊。我想問一下這些Syncer模塊的重要性是什么,我是否需要在我的最終設計中使用所有syncer模塊。
    發(fā)表于 05-18 09:25

    代碼規(guī)范的重要性是什么

    論代碼規(guī)范的重要性
    發(fā)表于 05-19 13:07

    串聯(lián)諧振試驗裝置的重要性

    華天電力專業(yè)生產(chǎn)串聯(lián)諧振(又稱串聯(lián)諧振試驗裝置),接下來為大家分享串聯(lián)諧振試驗裝置的重要性。在對電力設備的運行和維護工作中,預防試驗是重要的一個環(huán)節(jié),也是保證電力設備安全運行的有效手段之一。這是
    發(fā)表于 01-19 14:04

    時鐘的重要性,如何正確設計高性能轉(zhuǎn)換器

    的主要缺點是,您放棄了實現(xiàn)dc、地震、音頻和更高帶寬應 用的絕對最高可能性能所需的自定義和優(yōu)化。在急于重用和完 成設計的過程中,往往會犧牲精確性能。其容易忽略和忽視 的一個主要方面是時鐘。在本文中,我們將討論時鐘的重要性, 并為
    發(fā)表于 01-27 07:27

    正確選擇系統(tǒng)架構(gòu)的重要性?

    標準的符合測試會如何賦予工程師自由度?最新可用隔離元件的性能提升如何幫助替代架構(gòu)在不影響安全的前提下提升系統(tǒng)
    發(fā)表于 03-11 07:04

    什么是網(wǎng)絡拓撲,它的重要性是什么?

    什么是網(wǎng)絡拓撲,它的重要性是什么?
    發(fā)表于 03-17 06:50

    操作系統(tǒng)的重要性如何?

    明白你學習操作系統(tǒng)的目的是什么?操作系統(tǒng)的重要性如何?學習操作系統(tǒng)會給我帶來什么?下面我會從這幾個方面為你回答下。操作系統(tǒng)也是一種軟件,但是操作系統(tǒng)是一種非常復雜的軟件。操作系統(tǒng)提供了幾種抽象模型文件:對 I/O 設備的抽象虛擬內(nèi)存:對程序存儲器的抽象進程:對一個正在運行
    發(fā)表于 07-23 08:26

    時鐘服務器的重要性是什么?

    時鐘服務器的重要性是什么?
    發(fā)表于 11-08 08:31

    UPS的重要性

    中心機房的UPS太重要了,前不久就出現(xiàn)過停電壞了一個磁盤陳列硬盤的事故,一個2T的硬盤壞了,還好有一個備用的硬盤使用,否則磁盤陳列里的資料就岌岌可危了。服務器多了,UPS的重要性尤其重要,學校周邊
    發(fā)表于 11-16 09:09

    arm匯編的重要性是什么?

    arm匯編的重要性是什么?
    發(fā)表于 11-30 08:03

    POE浪涌保護的重要性是什么?

    POE浪涌保護的重要性是什么?
    發(fā)表于 01-14 06:07

    提升安全與監(jiān)控:電梯智能相機的重要性

    電梯智能相機的重要性
    的頭像 發(fā)表于 09-14 14:37 ?708次閱讀