欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

3天內不再提示

SOK在手機行業(yè)的應用案例

NVIDIA英偉達企業(yè)解決方案 ? 來源:NVIDIA英偉達企業(yè)解決方案 ? 2024-07-25 10:01 ? 次閱讀

介紹

通過封裝 NVIDIA Merlin HugeCTR,Sparse Operation Kit(以下簡稱 SOK)使得 TensorFlow 用戶可以借助 HugeCTR 的一些相關特性和優(yōu)化加速 GPU 上的分布式 Embedding 訓練。

在以往文章中(Merlin HugeCTR Sparse Operation Kit 系列之一、Merlin HugeCTR Sparse Operation Kit 系列之二)我們對 HugeCTR SOK 的基本功能、性能、用法和原理做了詳細的介紹。近期 SOK 又發(fā)布了多個版本迭代,這篇博客對最新 v2.0 版本中的新特性(尤其是動態(tài) Embedding 和在線訓練增量導出)、用法進行了歸納總結和介紹,并在最后介紹了 SOK 在手機行業(yè)的應用案例。

5f44f974-48e1-11ef-b8af-92fbcf53809c.png

圖 1. SOK 訓練的數據并行

- 模型并行-數據并行流程

特性

SOK 作為 TensorFlow 的 Plugin,專注于針對 Embedding 的儲存和查詢過程進行優(yōu)化,以下是目前 SOK 提供的主要功能:

提供 Embedding 部分的多機多卡模型并行功能;

為 Embedding Table 提供了 Hash Table 的功能,并且該 Hash Table 可以將 Embedding Vector 存放到 Device Memory 和 Host Memory 上,充分利用設備儲存;

為 Embedding Lookup 提供了高性能的 Embedding Lookup Kernel,采用 HugeCTR 的 Cuda Kernel 為后端,Fuse 多個 Lookup Op 到一個 Lookup Op,提升 Embedding Lookup 性能;

提供增量導出功能,導出某個時間點后 Embedding Table 中更新過的 Key 和 Value,減少訓練權重推送到推理端的開銷。

立即使用 SOK

Embedding Table

SOK 基于 TensorFlow 的 Variable 的基礎上,提供了 Variable 和 DynamicVariable 來儲存 Embedding Table。

不同于 TensorFlow 的 Variable 將數據儲存到某個 GPU 中,SOK 的 Variable 可以將數據均勻儲存在訓練的所有 GPU 上,也可以將數據儲存到某一個 GPU 中,下面是使用 SOK 的 Variable 創(chuàng)建儲存在每一個 GPU 和 Variable 儲存到 GPU0 上的例子:

#Defaultmethodofsok.VariableisDistributedmethod,VariableevenlydistributedtoeachGPU
v1 = sok.Variable(np.arange(15 * 16).reshape(15, 16), dtype=tf.float32)


#If you want to assign a sok.Variable to a specific GPU, add the parameter mode=“l(fā)ocalized:gpu_id” when defining sok.variable, where gpu_id refers to the rank number of a GPU in Horovod
v2=sok.Variable(np.arange(15*16).reshape(15,16),dtype=tf.float32,mode="localized:0")

v1 的申請中,SOK 會自動將 v1 的數據均勻儲存到訓練域中每一個 GPU 上,v2 的申請中,在參數中添加了mode="localized:0" 這個字符串參數,SOK 會將 v2 的數據放置在 GPU0 中。

SOK 中提供了 Variable 和 DynamicVariable 兩種不同的形式儲存 Embedding Table。Variable 可以簡稱為 Static Embedding Table,一個是靜態(tài)的二維數據,在申請時需要確定 Embedding Table 的 Shape,申請結束后,SOK 會相應申請好數據使用的空間(如果 Static Embedding Table 分布在所有 GPU 上,那么所有 GPU 平分這個空間)。因為 Static Embedding Table 是一個靜態(tài)的二維數組,這也意味著 Lookup 時查找的 Indice,是無法超出這個二維數組第一個 Dimension 的長度的,否則會發(fā)生越界問題。

Static Embedding Table,對于 Lookup Indice 存在范圍限制,很多用戶輸入的 Lookup Indice 又是 Hash 過的 Key,所以 SOK 提出 DynamicVariable 來解決 Lookup Indice 范圍限制的問題。SOK 的 DynamicVariable 是使用 Hash Table 來儲存 Embedding Table 的,解決了這個問題。

SOK 的 DynamicVariable 封裝了 2 個基于 GPU 的 Hash Table(HierarchicalKV 和 Dynamic Embedding Table),其中 HierarchicalKV(以下簡稱 HKV)是 NVIDIA Merlin 框架下的 Hash Table Repo,它有以下 2 個特性:

HKV 可以利用 GPU Memory 和 Host Memory 儲存 Embedding Table 中的 Embedding Vector,充分利用訓練中的內存資源;

HKV 的 Hash Table 擁有 Eviction 功能,Hash Table 滿了后不會繼續(xù)增長,繼續(xù) Insert 會淘汰掉最不常用的 Key/Value,提供 LRU、LFU 等常用淘汰策略,也可以自定義淘汰策略。

HKV 的 Repo 地址為 HKV repo,提供了 C++ Level 的 Hash Table API,也為推薦系統(tǒng)提供了組合 API,方便推薦系統(tǒng)用戶使用。SOK 中申請 HKV Embedding Table 的代碼如下:

#init_capacityandmax_capacityareparametersacceptedbytheHKVtable.ThemeaningsoftheseparameterscanbefoundintheHKVdocumentation.
v2 = sok.DynamicVariable(
  dimension=16, # embedding vector length
  var_type="hybrid", # use HKV backend
  initializer="uniform", # use uniform distribution random initializer
  init_capacity=1024 * 1024, # The number of embedding vectors allocated initially in the hash table
  max_capacity=1024 * 1024, # The number of embedding vectors allocated finally in the hash table
max_hbm_for_vectors=2,#howmanyGPUmemoryshouldthishashtableuse,unitisGB

從上面代碼可見,SOK 申請 HKV Hash Table 時,需要設置一些參數,這些參數如何設置可以閱讀 SOK 和 HKV 的文檔。

SOK 的 Variable 和 DynamicVariable 均繼承自 TensorFlow 的 ResourceVariable,除了 SOK 的自己定義的參數外,讀者和用戶可以按照使用 ResourceVariable 的習慣添加 ResourceVariable 的參數。

Embedding Lookup

SOK embedding lookup_sparse 提供與 tf.nn.embedding_lookup_sparse 相似的 API,與 tf.nn.embedding_lookup_sparse 不同的是,SOK 的 embedding lookup_sparse 可以同時將多個 Lookup Fuse 到一起,代碼如下:

#UseSOKembeddinglookupsparsetodo2embeddinglookups
    emb1, emb2 = sok.lookup_sparse([sok_var1, sok_var2],[keys1, keys2],combiners=["sum", "mean"])
# equals to
    emb1 = tf.nn.embedding_lookup_sparse(v1, indices1, combiner="sum")
emb2=tf.nn.embedding_lookup_sparse(v2,indices2,combiner="mean")

Embedding Table Dump/Load

SOK 關于 Embedding Table 的權重提供了 Dump/Load 和增量導出 Incremental Dump 的功能。

Dump/Load 可以自動并行的進行 Embedding Table 的 Key、Value、Optimizer 中狀態(tài)變量(可選)在文件系統(tǒng)中的讀寫,將 Embedding Table 的 Key、Value、Optimizer 中的狀態(tài)變量儲存成二進制文件/從二進制文件中讀取,下面是 SOK 中 Dump/Load 的例子:

#optimizerstatesareoptional.IftheyareunspecifiedincallingtheAPIsabove,onlythekeysandvaluesareloaded.
optimizer = tf.keras.optimizers.SGD(learning_rate=1.0)
sok_optimizer = sok.OptimizerWrapper(optimizer)
path = "./weights"
sok_vars = [sok_var1,sok_var2]
sok.dump(path, sok_vars, sok_optimizer)
sok.load(path,sok_vars,sok_optimizer)

在大部分推薦系統(tǒng)業(yè)務中,Embedding Table 的內存占用非常大,因此,在 Continued Training 中,用戶通常會將訓練一段時間后更新了的 Key 和 Value 推送到推理端,這樣可以避免推送整個 Embedding Table 產生的巨大開銷,SOK 同樣提供了 incremental_dump 的 API 來實現這個功能。incremental_dump 接受一個 UTC Time Threshold,可以將 Time Threshold 后更新的 Key/Value 導出到 Numpy Array 中:

#sokincrementaldump
import pytz
from datetime import datetime


#should convert datatime to utc time
utc_time_threshold = datetime.now(pytz.utc)


sok_vars = [sok_var1,sok_var2]
#keys and values are Numpy array
keys,values=sok.incremental_model_dump(sok_vars,utc_time_threshold)

SOK 與 TensorFlow 的兼容性

SOK 目前兼容 TF2 的靜態(tài)圖,但是不支持 TensorFlow 的 XLA,如果開啟 TensorFlow 的 XLA,需要手動將 SOK 的 Lookup 的 Layer 排除在外,偽代碼如下所示:

@tf.function
def sok_layer(inputs): 
     return sok.lookup_sparse(inputs)


@tf.function(jit_compile=True) 
def xla_layer(inputs): 
     x = xla_layer(inputs) 
returnx

應用案例分享

以下是近期 NVIDIA 技術團隊開展的部分手機行業(yè)推薦場景高性能優(yōu)化項目實踐經驗分享:

案例 1:通過 NVIDIA Merlin

HugeCTR SOK 以及 NVTabular

實現了 GPU 加速的推薦系統(tǒng)

應用背景:

客戶的推薦系統(tǒng)是針對客戶手機端的廣告和內容,該推薦系統(tǒng)之前是使用 CPU PS 架構運行,客戶希望使用 GPU 架構來進行加速。

應用方案/效果以及影響:

通過 HugeCTR Sparse Operation Kit + NVTabular 實現了 GPU 加速的推薦系統(tǒng),性能加速如下:

實驗性能對比:

SOK 將原有只能單 GPU 訓練的任務擴展到多 GPU 訓練,并且達到了很好的弱擴展性,支持更大的模型。SOK + tfrecord 3GPU 耗時約 1.3 個小時 vs TF + tfrecord 1GPU 耗時約 3.4 個小時。

業(yè)務性能對比:

由于業(yè)務系統(tǒng)輸入數據較大,因此客戶采取 Parquet 數據格式進行 Input 數據壓縮,業(yè)務性能提升如下,NVTabular Load Parquet 耗時約 1.8 個小時 vs TF Load Parquet 耗時約 7.8 個小時。

在 SOK 加速的基礎上,NVTabular Parguet Datareader 進一步解決了數據讀取瓶頸的問題,在實際業(yè)務測試中,相比原生 TensorFlow Parquet Datareader 達到了 400% 的速度提升。

案例 2:通過 NVIDIA Merlin

HugeCTR SOK 實現了

GPU 加速的推薦系統(tǒng)

應用背景:

客戶的推薦系統(tǒng)是針對客戶手機端的廣告和內容,該推薦系統(tǒng)使用 CPU + PS 和 GPU + PS 的架構運行。

應用方案/效果以及影響:

通過 HugeCTR Sparse Operation Kit 進行了 GPU 加速的推薦系統(tǒng)的實驗,性能加速如下:

End to End 時間從 CPU + PS 的 760 毫秒優(yōu)化至 300 毫秒,性能提升約 60%。GPU + PS 的 450 毫秒優(yōu)化至 300 毫秒,性能提升約 33%。

GPU + PS 架構的 Embedding 部分耗時為 250 毫秒,SOK 的 Embedding 部分耗時為 85 毫秒,性能提升 67%。

5f63d7a4-48e1-11ef-b8af-92fbcf53809c.png

結束語

SOK v2.0 通過封裝 HKV 和 HugeCTR 的底層代碼提供了模型并行,且功能完善的動態(tài) Embedding Table 和高效的相關計算。在多個業(yè)內實際使用場景中,從速度效率、模型擴展、功能完善等角度,使用戶獲得了不錯的收益。

關于作者

康暉

GPU 計算專家,2022 年加入 NVIDIA,當前主要從事 SOK 的設計與開發(fā)。研究領域包括推薦系統(tǒng)工程實現與優(yōu)化,通訊優(yōu)化。

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

    關注

    14

    文章

    5082

    瀏覽量

    103838
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4789

    瀏覽量

    129442
  • 模型
    +關注

    關注

    1

    文章

    3348

    瀏覽量

    49277
  • SOK
    SOK
    +關注

    關注

    0

    文章

    5

    瀏覽量

    6349

原文標題:借助最新 NVIDIA Merlin TensorFlow 插件實現大規(guī)模 Embedding 擴展

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    GPS在手機上的定位系統(tǒng)設計

    `<p><font face="Verdana"><strong>GPS在手機
    發(fā)表于 12-18 15:09

    手機在手,IC我有

    手機在手,IC我有!一鍵撥號,即刻聯系供應商。洽洽搜搜讓您實現隨時隨地找貨、詢價、報價。點擊下載吧!
    發(fā)表于 09-20 10:24

    聲表面濾波器有用在手機上嗎?

    今天看到一篇文章,有提到聲表面濾波器可以用在智能手機上,我自己就有銷售聲表面濾波器,但是從培訓到現在都沒聽說聲表面濾波器可以用在手機上,那么聲表面濾波器到底能不能用在手機上呢?具體又是那一款呢?
    發(fā)表于 12-02 21:30

    通過GPS參數怎么在手機地圖上顯示

    用STM32和GPS模塊做了個手機短信定位,手機可以收到GPS參數 ,求大神指導怎么通過收到的GPS參數在手機地圖上顯示位置。。。。
    發(fā)表于 06-13 17:41

    在手機上采用USB傳輸高清視頻

    高清錄像作為他們的高端產品。在手機中整合高清視頻將會進一步體現其實用價值,因為它已不僅是一個數碼相機,還是一個數碼攝像機。把高清錄像放到手機會帶來新的問題:如何使高清視頻回放。在手機上直接回放視頻是很
    發(fā)表于 05-16 10:44

    5G在手機中的應用真實情況究竟是什么樣的呢?

    引言“預計5G 手機將成為今后十年智能手機行業(yè)增長最快的領域?!?G 標準的加速發(fā)展使移動運營商能夠推進其5G 部署計劃,其中一些早期部署將于明年完成。根據Strategy Analytics 預測
    發(fā)表于 07-31 08:26

    應用在手機領域的各類傳感器介紹

    智能手機之所以被稱之為智能,主要原因是它具備了傳統(tǒng)通訊設備所沒有的附加屬性。智能手機在智能的道路上越走越遠,我們平日里用手機解決大部分的問題,上網、游戲、導航、支付等等,從中受益頗多。在手機
    發(fā)表于 07-30 08:06

    怎么做到在手機上自主分析數據的?

    看很多人都說在手機上就能分析數據,還是從自己的立場出發(fā)去調整報表,針對性分析自己關心的數據。這是怎么做到的?用什么數據分析工具實現的?用數據可視化工具制作的報表就可以在手機端自主分析。也就是上段提到
    發(fā)表于 04-13 10:00

    射頻模塊儀表PXI在手機生產測試上的應用是什么

    射頻模塊儀表PXI在手機生產測試上的應用是什么
    發(fā)表于 05-06 09:24

    UWB在手機中的應用是什么

    或者多個比如三個以上iPhone 11,才可能給出位置坐標,或者有別的新技術?IoT、工業(yè)互聯網等需要測距定位的場合,是UWB的用武之地。其實,UWB在IoT中已經有了很多應用,目前是上升時期。UWB在手機中的應用,iPho...
    發(fā)表于 07-26 06:39

    如何在手機上打開/啟動應用程序?

    您希望如何在手機上打開/啟動應用程序?您會手動啟動還是通過語音命令啟動它?
    發(fā)表于 05-04 08:56

    基于ERP在手機制造行業(yè)中的應用

    近些年來,國內手機制造行業(yè)的發(fā)展極其迅猛,產品的質量和數量都有了大幅度的提升,相當一部分優(yōu)勢企業(yè)已開始問鼎國際市場并取得了不俗的戰(zhàn)績。但是近兩年,受美日經濟增速減緩的影響,國內的手機制造行業(yè)
    發(fā)表于 09-23 16:18 ?0次下載
    基于ERP<b class='flag-5'>在手機</b>制造<b class='flag-5'>行業(yè)</b>中的應用

    機器人在手機行業(yè)的應用

    很多的顧慮。 目前,手機行業(yè)對于機器人的使用要求,主要呈現出以下幾個特點。 首先,機器人可使用環(huán)節(jié)眾多,但要求精度高。 據了解,手機的自動化產線分為組裝線和配件生產線,光是組裝就有上百道工序,而現
    發(fā)表于 09-29 17:09 ?0次下載
    機器人<b class='flag-5'>在手機</b><b class='flag-5'>行業(yè)</b>的應用

    SOK的Embedding計算過程及原理詳解

    在上期文章中,我們對 HugeCTR Sparse Operation Kit (以下簡稱SOK) 的基本功能,性能,以及 API 用法做了初步的介紹,相信大家對如何使用 SOK 已經有了基本的了解
    的頭像 發(fā)表于 06-14 11:34 ?1536次閱讀

    了解SOK的原理

      以上就是 SOK 將數據并行轉化為模型并行再轉回數據并行的過程,這整個流程都被封裝在了 SOK 的 Embedding Layer 中,用戶可以直接調用相關的 Python API 即可輕松完成訓練。
    的頭像 發(fā)表于 08-15 15:22 ?2012次閱讀
    了解<b class='flag-5'>SOK</b>的原理