久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

想了解大廠如何做推薦,?Facebook開源深度學(xué)習(xí)推薦模型DLRM

 印度阿三17 2021-03-31

DLRM 模型使用 Facebook 的開源框架 PyTorch 和 Caffe2 實(shí)現(xiàn)。DLRM 通過(guò)結(jié)合協(xié)同過(guò)濾和基于預(yù)測(cè)分析方法的原理,,相比于其他模型有所提升,,從而使其能夠有效地處理生產(chǎn)規(guī)模的數(shù)據(jù),并得到目前最佳結(jié)果,。

Facebook 開源該模型并且公布相關(guān)論文,,旨在幫助該領(lǐng)域的研究人員解決這類模型所面臨的獨(dú)特挑戰(zhàn)。Facebook 希望鼓勵(lì)進(jìn)一步的算法實(shí)驗(yàn),、建模,、系統(tǒng)協(xié)同設(shè)計(jì)和基準(zhǔn)測(cè)試。這有助于發(fā)掘新的模型和更高效的系統(tǒng),,從而為使用各種數(shù)字服務(wù)的人們提供更具相關(guān)性的內(nèi)容,。

了解 DLRM 模型

DLRM 模型使用嵌入表示處理類別特征,而使用底部的多層感知器(MLP)處理連續(xù)特征,。然后計(jì)算不同特征的二階交互作用(second-order interaction),。最后,,使用頂部的 MLP 對(duì)結(jié)果進(jìn)行處理,并輸入到 sigmoid 函數(shù)中,,得到某次點(diǎn)擊的概率,。   

圖片圖 1 DLRM 模型處理描述用戶和產(chǎn)品的連續(xù)(密集)特征和類別(稀疏)特征,如圖所示,。該模型使用了各類硬件和軟件組件,,如內(nèi)存容量和帶寬,以及通信和計(jì)算資源,。

基準(zhǔn)與系統(tǒng)協(xié)同設(shè)計(jì)

DLRM 的開源實(shí)現(xiàn)可以用作基準(zhǔn),,衡量以下各項(xiàng)指標(biāo): 

  • 模型(及其相關(guān)算子)的執(zhí)行速度。

  • 不同數(shù)值技術(shù)對(duì)精度的影響,。

這可以在不同的硬件平臺(tái)上完成,,如 BigBasin 人工智能平臺(tái)。

DLRM 基準(zhǔn)提供了兩個(gè)版本的代碼,,分別使用 PyTorch 和 Caffe2,。此外,還有另一個(gè) 使用 Glow C 算子實(shí)現(xiàn)的版本,。(為了適應(yīng)每個(gè)框架的具體情況,,各框架的代碼略有不同,但總體結(jié)構(gòu)是相似的,。)這些實(shí)現(xiàn)允許我們將 Caffe2 框架與 PyTorch 框架,,以及當(dāng)前專注于加速器的 Glow 進(jìn)行對(duì)比。也許我們可以提取每個(gè)框架中的最佳特征,,未來(lái)將其整合到一個(gè)框架中,。

圖片

DLRM 基準(zhǔn)支持生成隨機(jī)輸入和合成輸入。同時(shí)支持模型自定義生成與類別特征對(duì)應(yīng)的索引,,這有許多原因:例如,如果某個(gè)應(yīng)用程序使用了一個(gè)特定的數(shù)據(jù)集,,但出于隱私考慮我們不能共享數(shù)據(jù),,那么我們可以選擇通過(guò)分布表示類別特征。另外,,如果我們想利用系統(tǒng)組件,,如研究記憶行為,我們可能需要捕捉合成軌跡(synthetic trace)內(nèi)原始軌跡的基本位置,。

此外,,F(xiàn)acebook 根據(jù)用戶場(chǎng)景的不同,使用了多種個(gè)性化的推薦模型,。例如,,為了在一定規(guī)模上實(shí)現(xiàn)高性能服務(wù),,可以在單個(gè)機(jī)器上對(duì)輸入進(jìn)行批處理并分配多個(gè)模型,從而并行執(zhí)行推理過(guò)程,。此外,,F(xiàn)acebook 數(shù)據(jù)中心的大量服務(wù)器具有架構(gòu)異構(gòu)性,從不同的 SIMD 寬度到不同的緩存結(jié)構(gòu)的實(shí)現(xiàn),。架構(gòu)異質(zhì)性為軟硬件協(xié)同設(shè)計(jì)和優(yōu)化提供了額外機(jī)會(huì),。(參見(jiàn)論文:《The Architectural Implications of Facebook's DNN-based Personalized Recommendation》 該文對(duì) Facebook 神經(jīng)推薦系統(tǒng)的體系結(jié)構(gòu)進(jìn)行了深入分析。)

并行計(jì)算

如圖 1 所示,,DLRM 基準(zhǔn)由計(jì)算主導(dǎo)的 MLP 和內(nèi)存容量有限的嵌入組成,。因此,它自然需要依靠數(shù)據(jù)并行性來(lái)提升 MLP 的性能,,并且依賴模型并行化來(lái)滿足內(nèi)嵌對(duì)內(nèi)存容量的需求,。DLRM 基準(zhǔn)測(cè)試提供了一個(gè)遵循此方法的并行實(shí)現(xiàn)。在交互過(guò)程中,,DLRM 需要一個(gè)高效的全通信原語(yǔ),,我們稱之為蝴蝶式洗牌(butterfly shuffle)。它將每個(gè)設(shè)備上 minibatch 的嵌入查找結(jié)果重新洗牌,,分配到所有設(shè)備上,,成為 minibatch 嵌入查找的一部分。如下圖所示,,每種顏色表示 minibatch 的不同元素,,每個(gè)數(shù)字表示設(shè)備及其分配的嵌入。我們計(jì)劃優(yōu)化系統(tǒng),,并在以后的博客中公布性能研究細(xì)節(jié),。 

 圖 3 DLRM butterfly shuffle 示意圖

建模與算法實(shí)驗(yàn)

DLRM 基準(zhǔn)測(cè)試使用 Python 編寫,支持靈活實(shí)現(xiàn),,模型結(jié)構(gòu),、數(shù)據(jù)集和其他參數(shù)由命令行定義。DLRM 可用于推理和訓(xùn)練,。在訓(xùn)練階段,,DLRM 將反向傳播算子添加到計(jì)算圖中,允許參數(shù)更新,。

該代碼是完整的,,可以使用公開數(shù)據(jù)集,包括 Kaggle display advertising challenge 數(shù)據(jù)集,。該數(shù)據(jù)集包含 13 種連續(xù)特征和 26 種類別特征,,這些特征定義了 MLP 輸入層的大小以及模型中使用的嵌入數(shù)量,而其他參數(shù)可以通過(guò)命令行定義,。例如,,根據(jù)如下命令行運(yùn)行 DLRM 模型:   

python dlrm_s_pytorch.py --arch-sparse-feature-size=16 --arch-mlp-bot="13-512-256-64-16" --arch-mlp-top="512-256-1" --data-generation=dataset --data-set=kaggle --processed-data-file=./input/kaggle_processed.npz --loss-function=bce --round-targets=True --learning-rate=0.1 --mini-batch-size=128 --print-freq=1024 --print-time

訓(xùn)練結(jié)果如下圖所示 :   圖片圖 4 左圖展示了在訓(xùn)練階段和測(cè)試階段的二值交叉熵?fù)p失,,右圖為訓(xùn)練階段和測(cè)試階段準(zhǔn)確率

DLRM 模型可以在真實(shí)數(shù)據(jù)集上運(yùn)行,可以幫助我們測(cè)量模型的準(zhǔn)確率,,這對(duì)于使用不同的數(shù)值技術(shù)和其他模型進(jìn)行試驗(yàn)時(shí)尤其有用,。我們計(jì)劃在接下來(lái)的工作中對(duì)量化和算法實(shí)驗(yàn)對(duì)該模型的影響進(jìn)行更深入的分析。

從長(zhǎng)遠(yuǎn)來(lái)看,,開發(fā)新的,、更好的方法,將深度學(xué)習(xí)用于推薦和個(gè)性化工具(并提高模型的效率和性能),,能夠帶來(lái)將人們與相關(guān)的內(nèi)容聯(lián)系起來(lái)的新方法,。

DLRM 模型開源代碼

DLRM 模型輸入由稠密特征和稀疏特征組成。稠密特征為浮點(diǎn)數(shù)矢量,,稀疏特征為嵌入表的稀疏索引,。選擇的矢量傳入 MLP 網(wǎng)絡(luò)(圖中三角形),某些情況下矢量通過(guò)算子進(jìn)行交互,。

DLRM 實(shí)現(xiàn)

DLRM 模型有兩個(gè)實(shí)現(xiàn)版本: 

  • DLRM PyTorch:dlrm_s_pytorch.py

  • DLRM Caffe2:dlrm_s_caffe2.py

DLRM 數(shù)據(jù)生成和加載: 

dlrm_data_pytorch.py, dlrm_data_caffe2.py, data_utils.py

DLRM 測(cè)試命令(./test 路徑下): 

dlrm_s_test.sh

DLRM 基準(zhǔn)模型(./bench 路徑下): 

dlrm_s_benchmark.sh, dlrm_s_criteo_kaggle.sh
訓(xùn)練

訓(xùn)練一個(gè)較小模型:

$ python dlrm_s_pytorch.py --mini-batch-size=2 --data-size=6
time/loss/accuracy (if enabled):
Finished training it 1/3 of epoch 0, -1.00 ms/it, loss 0.451893, accuracy 0.000%
Finished training it 2/3 of epoch 0, -1.00 ms/it, loss 0.402002, accuracy 0.000%
Finished training it 3/3 of epoch 0, -1.00 ms/it, lo
ss 0.275460, accuracy 0.000%

使用 Debug 模式訓(xùn)練:

$ python dlrm_s_pytorch.py --mini-batch-size=2 --data-size=6 --debug-mode
model arch:
mlp top arch 3 layers, with input to output dimensions:
[8 4 2 1]
# of interactions
8
mlp bot arch 2 layers, with input to output dimensions:
[4 3 2]
# of features (sparse and dense)
4
dense feature size
4
sparse feature size
2
# of embeddings (= # of sparse features) 3, with dimensions 2x:
[4 3 2]
data (inputs and targets):
mini-batch: 0
[[0.69647 0.28614 0.22685 0.55131]
[0.71947 0.42311 0.98076 0.68483]]
[[[1], [0, 1]], [[0], [1]], [[1], [0]]]
[[0.55679]
[0.15896]]
mini-batch: 1
[[0.36179 0.22826 0.29371 0.63098]
[0.0921 0.4337 0.43086 0.49369]]
[[[1], [0, 2, 3]], [[1], [1, 2]], [[1], [1]]]
[[0.15307]
[0.69553]]
mini-batch: 2
[[0.60306 0.54507 0.34276 0.30412]
[0.41702 0.6813 0.87546 0.51042]]
[[[2], [0, 1, 2]], [[1], [2]], [[1], [1]]]
[[0.31877]
[0.69197]]
initial parameters (weights and bias):
[[ 0.05438 -0.11105]
[ 0.42513 0.34167]
[-0.1426 -0.45641]
[-0.19523 -0.10181]]
[[ 0.23667 0.57199]
[-0.16638 0.30316]
[ 0.10759 0.22136]]
[[-0.49338 -0.14301]
[-0.36649 -0.22139]]
[[0.51313 0.66662 0.10591 0.13089]
[0.32198 0.66156 0.84651 0.55326]
[0.85445 0.38484 0.31679 0.35426]]
[0.17108 0.82911 0.33867]
[[0.55237 0.57855 0.52153]
[0.00269 0.98835 0.90534]]
[0.20764 0.29249]
[[0.52001 0.90191 0.98363 0.25754 0.56436 0.80697 0.39437 0.73107]
[0.16107 0.6007 0.86586 0.98352 0.07937 0.42835 0.20454 0.45064]
[0.54776 0.09333 0.29686 0.92758 0.569 0.45741 0.75353 0.74186]
[0.04858 0.7087 0.83924 0.16594 0.781 0.28654 0.30647 0.66526]]
[0.11139 0.66487 0.88786 0.69631]
[[0.44033 0.43821 0.7651 0.56564]
[0.0849 0.58267 0.81484 0.33707]]
[0.92758 0.75072]
[[0.57406 0.75164]]
[0.07915]
DLRM_Net(
(emb_l): ModuleList(
(0): EmbeddingBag(4, 2, mode=sum)
(1): EmbeddingBag(3, 2, mode=sum)
(2): EmbeddingBag(2, 2, mode=sum)
)
(bot_l): Sequential(
(0): Linear(in_features=4, out_features=3, bias=True)
(1): ReLU()
(2): Linear(in_features=3, out_features=2, bias=True)
(3): ReLU()
)
(top_l): Sequential(
(0): Linear(in_features=8, out_features=4, bias=True)
(1): ReLU()
(2): Linear(in_features=4, out_features=2, bias=True)
(3): ReLU()
(4): Linear(in_features=2, out_features=1, bias=True)
(5): Sigmoid()
)
)
time/loss/accuracy (if enabled):
Finished training it 1/3 of epoch 0, -1.00 ms/it, loss 0.451893, accuracy 0.000%
Finished training it 2/3 of epoch 0, -1.00 ms/it, loss 0.402002, accuracy 0.000%
Finished training it 3/3 of epoch 0, -1.00 ms/it, loss 0.275460, accuracy 0.000%
updated parameters (weights and bias):
[[ 0.0543 -0.1112 ]
[ 0.42513 0.34167]
[-0.14283 -0.45679]
[-0.19532 -0.10197]]
[[ 0.23667 0.57199]
[-0.1666 0.30285]
[ 0.10751 0.22124]]
[[-0.49338 -0.14301]
[-0.36664 -0.22164]]
[[0.51313 0.66663 0.10591 0.1309 ]
[0.32196 0.66154 0.84649 0.55324]
[0.85444 0.38482 0.31677 0.35425]]
[0.17109 0.82907 0.33863]
[[0.55238 0.57857 0.52154]
[0.00265 0.98825 0.90528]]
[0.20764 0.29244]
[[0.51996 0.90184 0.98368 0.25752 0.56436 0.807 0.39437 0.73107]
[0.16096 0.60055 0.86596 0.98348 0.07938 0.42842 0.20453 0.45064]
[0.5476 0.0931 0.29701 0.92752 0.56902 0.45752 0.75351 0.74187]
[0.04849 0.70857 0.83933 0.1659 0.78101 0.2866 0.30646 0.66526]]
[0.11137 0.66482 0.88778 0.69627]
[[0.44029 0.43816 0.76502 0.56561]
[0.08485 0.5826 0.81474 0.33702]]
[0.92754 0.75067]
[[0.57379 0.7514 ]]
[0.07908]
測(cè)試

測(cè)試代碼是否正常運(yùn)行:

./test/dlrm_s_tests.sh
Running commands ...
python dlrm_s_pytorch.py
python dlrm_s_caffe2.py
Checking results ...
diff test1 (no numeric values in the output = SUCCESS)
diff test2 (no numeric values in the output = SUCCESS)
diff test3 (no numeric values in the output = SUCCESS)
diff test4 (no numeric values in the output = SUCCESS)
基準(zhǔn)模型

表現(xiàn)基準(zhǔn)

./bench/dlrm_s_benchmark.sh

該模型支持 Kaggle 展示廣告挑戰(zhàn)數(shù)據(jù)集,,數(shù)據(jù)集需完成如下準(zhǔn)備工作:

指定原始數(shù)據(jù)文件:--raw-data-file=<path/train.txt>

預(yù)處理

處理數(shù)據(jù)存儲(chǔ)在.npz 文件,路徑為<root_dir>/input/kaggle_data/ .npz

可以用處理文件運(yùn)行:--processed-data-file=<path/ .npz>

./bench/dlrm_s_criteo_kaggle.sh
模型保存與加載

訓(xùn)練過(guò)程中模型保存:--save-model=<path/model.pt>,。如果測(cè)試準(zhǔn)確率有所提升,,則保存模型。保存的模型可以通過(guò) --load-model=<path/model.pt>加載,。模型加載后可以用于繼續(xù)訓(xùn)練,,也可以用于在測(cè)試數(shù)據(jù)集上測(cè)試,需要指定 --inference-only,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多