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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

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

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

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

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

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

軟聚類代碼

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

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

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

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

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

文檔聚類示例

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

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

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

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

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

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

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

準(zhǔn)備數(shù)據(jù)集

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

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

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 將維度降到五個(gè)特征。本示例僅使用 10000 條記錄,作為指南。

為了再現(xiàn)性,設(shè)置random_state。在您的計(jì)算機(jī)上運(yùn)行時(shí),此工作流中的結(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 模型,并通過設(shè)置prediction_data=True啟用使用all_points_membership_vectors進(jìn)行軟聚類。也設(shè)置min_cluster_size=50,這意味著少于 50 個(gè)標(biāo)題的分組將被視為另一個(gè)集群(或噪聲)的一部分,而不是單獨(dú)的集群。

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)

檢查兩個(gè)集群

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

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

隨機(jī)選擇兩個(gè)簇,例如簇 7 和簇 10 ,并檢查每個(gè)簇中的幾個(gè)點(diǎn)。

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

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

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

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

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

為什么軟集群很重要

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

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

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)驗(yàn)累積分布函數(shù)表明,許多點(diǎn)接近于被分配不同的聚類標(biāo)簽。事實(shí)上,大約 30% 的點(diǎn)的前兩個(gè)聚類成員概率在 0.2 以內(nèi)(圖 1 )。

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

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

績(jī)效基準(zhǔn)結(jié)果

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

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

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

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

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 后端運(yùn)行 HDBSCAN all_points_membership_vectors所用的時(shí)間

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

關(guān)鍵要點(diǎn)

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

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

要開始使用 cuML ,請(qǐng)?jiān)L問 RAPIDS 入門頁(yè)面,其中提供了 conda 包、 pip 包和 Docker 容器。 cuML 也可以在 NVIDIA NGC 上的 NVIDIA optimized PyTorch 和 Tensorflow Docker 容器中使用,這使得端到端工作流更加簡(jiǎn)單。

致謝

這篇文章描述了 Tarang Jain 在 Corey Nolet 指導(dǎo)下在 NVIDIA 實(shí)習(xí)期間提供的 cuML 功能。

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

    關(guān)注

    14

    文章

    4823

    瀏覽量

    102659
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    29456

    瀏覽量

    267781
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    求助,ADC接地的重要性

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

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

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

    BGA焊接溫度控制重要性

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

    Syncer模塊的重要性是什么?

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

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

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

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

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

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

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

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

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

    什么是網(wǎng)絡(luò)拓?fù)洌?b class='flag-5'>重要性是什么?

    什么是網(wǎng)絡(luò)拓?fù)?,它?b class='flag-5'>重要性是什么?
    發(fā)表于 03-17 06:50

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

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

    時(shí)鐘服務(wù)器的重要性是什么?

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

    UPS的重要性

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

    arm匯編的重要性是什么?

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

    POE浪涌保護(hù)的重要性是什么?

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

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

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