【Pytorch基础教程40】DLRM推荐算法模型部署

news2024/11/8 23:09:07

note

文章目录

  • note
  • 一、DLRM模型
    • 1. 特征工程和embedding层
    • 2. butterfly shuffle
    • 3. 模型结构
  • 二、模型部署
  • Reference

一、DLRM模型

DLRM是2020年meta提出的工业界推荐算法模型,模型结构非常简单,也没用到什么attention机制等的东西,更多是注重在推荐系统稀疏特征场景下的落地。

1. 特征工程和embedding层

  • 模型的特征工程部分被分成了两块,一块是基于类别等离散属性的one-hot编码形成的稀疏矩阵;一块是基于数值等连续属性的稠密矩阵;
  • sparse feature:离散的类别特征,通过embedding层转为稠密embedding;通过Embedding将其映射成一个稠密的连续值。假设one-hot编码后的向量是 e i e_i ei, 向量中除了第 i \mathrm{i} i 个位 置为1外, 通过Embedding后得到的embedding向量为 w i w_i wi如下,其中
    W ∈ R m × d W \in \mathbb{R}^{\mathrm{m} \times \mathrm{d}} WRm×d
    w i T = e i T W \mathrm{w}_{\mathrm{i}}^{\mathrm{T}}=\mathrm{e}_{\mathrm{i}}^{\mathrm{T}} \mathrm{W} wiT=eiTW
    • 特征交叉:类似deepfm中的FM层特征交叉
  • dense feature:DLRM中选择的处理方法是通过MLP多层感知机将所有的连续特征转化成一个与离散特征同样维度的embedding向量, 如下图的黄色部分。

在这里插入图片描述

2. butterfly shuffle

为了提高MLP的并行和embedding table的高效存储,DLRM使用一种all-to-all的通信原语,butterfly shuffle。
在这里插入图片描述

3. 模型结构

eb_configs = [
    EmbeddingBagConfig(
        name=f"t_{feature_name}",
        embedding_dim=model_config.embedding_dim,
        num_embeddings=model_config.num_embeddings_per_feature[feature_idx],
        feature_names=[feature_name],
    )
    for feature_idx, feature_name in enumerate(
        model_config.id_list_features_keys
    )
]
# Creates an EmbeddingBagCollection without allocating any memory
ebc = EmbeddingBagCollection(tables=eb_configs, device=torch.device("meta"))

module = DLRM(
    embedding_bag_collection=ebc,
    dense_in_features=model_config.dense_in_features,
    dense_arch_layer_sizes=model_config.dense_arch_layer_sizes,
    over_arch_layer_sizes=model_config.over_arch_layer_sizes,
    dense_device=device,
)
summary(module)
模型结构:可通过torchinfo.summary展示
======================================================================
Layer (type:depth-idx)                        Param #
======================================================================
DLRM                                          --
├─SparseArch: 1-1                             --
│    └─EmbeddingBagCollection: 2-1            --
│    │    └─ModuleDict: 3-1                   11,388,433,600
├─DenseArch: 1-2                              --
│    └─MLP: 2-2                               --
│    │    └─Sequential: 3-2                   154,944
├─InteractionArch: 1-3                        --
├─OverArch: 1-4                               --
│    └─Sequential: 2-3                        --
│    │    └─MLP: 3-3                          606,976
│    │    └─Linear: 3-4                       257
======================================================================
Total params: 11,389,195,777
Trainable params: 11,389,195,777
Non-trainable params: 0
======================================================================

二、模型部署

#!/bin/bash
torch-model-archiver --model-name dlrm,\
                     --version 1.0, \
                     --serialized-file "/root/test/torchrec_dlrm/dlrm.pt",\
                     --model-file dlrm_factory.py, \
                     --extra-file dlrm_model_config.py, \
                     --handler dlrm_handler.py, \
                     --force

# 打包推荐模型
python create_dlrm_mar.py
mkdir model_store
mv dlrm.mar model_store
# 启动服务
torchserve --start --model-store model_store --models dlrm=dlrm.mar
# curl测试model
curl -H "Content-Type: application/json" --data @sample_data.json http://127.0.0.1:8080/predictions/dlrm
#{
#  "score": -0.05748695507645607
#}

Reference

[1] https://github.com/facebookresearch/dlrm
[2] https://ai.facebook.com/blog/dlrm-an-advanced-open-source-deep-learning-recommendation-model/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/606127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

权限维持-关于影子用户

前言 影子用户相信大家都是比较熟悉,是一种权限维持的好方法。 注:单机和域环境都可以使用,但是域中可能没有那么好用。 复现 一.本地 1. 正常的影子用户 我们在cmd命令中在生成用户时,在用户名后面加上$就可以 net user test$ …

【cfeng work】什么是SaaS? SaaS详细介绍

WorkProj 内容管理 SaaSSaaS的优势SaaS的注意项SaaS产品核心组件cfeng结合work理解SaaS 本文introduce SaaS的相关内容 昨天cfeng已经介绍过云原生了,其实就是应用在设计上就要围绕Cloud,代表技术就是容器化和微服务、DevOps和区别于传统瀑布模型的持续更…

【Linux】——多线程

目录 Linux线程概念 二级页表 线程的优点 线程的缺点 线程异常 线程的用途 Linux中的线程和进程 进程和线程 进程的多个线程共享 进程和线程的关系 Linux线程控制 POSIX线程库 线程创建 线程ID及地址空间布局 线程等待 线程终止 Linux线程概念 什…

华为OD机试真题 Java 实现【找终点】【2023 B卷 100分】,附详细解题思路

一、题目描述 给定一个正整数数组&#xff0c;设为nums&#xff0c;最大为100个成员&#xff0c;求从第一个成员开始&#xff0c;正好走到数组最后一个成员&#xff0c;所使用的最少步骤数。 要求&#xff1a; 第一步必须从第一元素开始&#xff0c;且1 < 第一步的步长 &…

初出茅庐的小李博客之CAN通信基础知识

CAN是什么&#xff1f; CAN 是 Controller Area Network 的缩写&#xff0c;中文是控制器局域网路,是 ISO 国际标准化的串行通信协议之一。 CAN:控制器局域网( Controller Area Network)属于现场总线的范畴&#xff0c;是一种有效支持分布式控制系统的串行通信网络 CAN是由德…

MySQL Windows 64位解压版安装

1、下载MySQL安装包 下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 选择安装版本&#xff1a;我选择的是5.1.43的版本&#xff0c;下载到本地&#xff0c;并解压到自己想要放的位置&#xff0c;比如&#xff1a;D:\soft 2、在D:\soft\m…

S7-200 PLC新特性是什么

更多关于西门子S7-200PLC内容请查看&#xff1a;西门子200系列PLC学习课程大纲(课程筹备中) 西门子200PLC能做什么&#xff1f; 它可以控制设备&#xff0c;实现自动控制&#xff0c;比如切割机&#xff0c;木雕刻机&#xff0c;写字机&#xff0c;锅炉的自动控制等等&#xf…

vscode工具使用

语言的使用&#xff1a; 安装chinse Lagnuage插件 关于设置 (1) 通过可视化界面的方式设置&#xff0c;File -> Preferences -> Settings 快捷键&#xff1a;ctrl , (<)打开 ctrl F4 关闭 (2) 通过json配置文件方式设置&#xff0c;ctrlshiftp, 选择Open …

c++继承详解

前言 继承是类复用的重要方式&#xff0c;学习面向对象语言时学习继承是必不可少的&#xff0c;在c中继承机制一种较为复杂的机制&#xff0c;下面让我们一起来认识一下c中的继承。 目录 1.继承的概念和定义 1.1继承的概念 1.2 继承的定义 2.基类和派生类之间的转换 3.继承…

基于html+css的图展示106

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

PCL点云处理之分层切片法计算树冠投影面积 (一百七十四)

PCL点云处理之分层切片法计算树冠投影面积 (一百七十四) 一、算法介绍二、方法流程三、具体实验1.代码2.效果四、算法总结一、算法介绍 在上一节中,通过树冠整体投影到同一水平面后,计算凸包面积,粗略估计了树冠投影面积,但在通常的研究学习中,这种方法较为笼统,大部分…

springboot配置使用redis序列化时报错“无法自动装配。找不到 ‘RedisConnectionFactory‘ 类型的 Bean”

今天在使用springboot操作redis时出现乱码的问题 像这样&#xff0c;这里对应的key明实际上时springboot:string 对应的值时徐浩的redis 但是当向redis推送数据时就乱码了&#xff0c;后面一查是因为在springboot-redis中&#xff0c;默认配置没有序列化&#xff0c;直接将str…

Python词云绘制

Python词云绘制 效果展示以及准备工作&#xff1a;进入代码书写 效果展示以及准备工作&#xff1a; 效果展示图&#xff1a; 准备工作 pycharm安装第三方库numpy,jieba,wordcloud词云文本的准备&#xff08;.txt&#xff09;背景图的准备&#xff08;我是用的PS&#xff09;…

[激光原理与应用-69]:激光焊接的10大常见缺陷及解决方法

激光焊接是一种以高能量密度的激光束作为热源的高效精密焊接方法。如今&#xff0c;激光焊接已广泛应用于各个行业&#xff0c;如&#xff1a;电子零件、汽车制造、航空航天等工业制造领域。但是&#xff0c;在激光焊接的过程中&#xff0c;难免会出现一些缺陷或次品。只有充分…

[架构之路-203] - 对系统需求类型的进一步澄清

目录 业务/商业需求&#xff1a; 用户/客户需求&#xff1a; 功能性需求&#xff1a; 非功能性需求&#xff1a; 系统需求&#xff1a; 约束条件&#xff1a; 软件需求说明书&#xff1a; 软件质量&#xff1a; 业务/商业需求&#xff1a; 是自顶向下的需求&#xff0…

pytorch卷积神经网络CNN 手写数字识别 MNIST数据集

模型结构和训练代码来自这里 https://blog.csdn.net/weixin_41477928/article/details/123385000 俺又加了离线测试的代码: 第一次运行此代码&#xff0c;需有网络&#xff0c;会下载开源数据集MNIST训练的过程中会把10个epoch的模型均保存到./models下&#xff0c;可能需要你…

2023年第三届陕西省大学生网络安全技能大赛--本科高校组 Reverse题解

文章目录 一. 我的upx -d怎么坏了1. 查看节区信息2. 动态调试脱壳3.输出迷宫图4.走迷宫 二. babypython1.字节码简单分析2. gpt分析3. 程序逻辑4.解题脚本 三. BadCoffee1. 相关文章2.解混淆3.解题脚本 四. Web&Assembly(暂时没复现出来,提供一些相关文章)总结 这次比赛做出…

冈萨雷斯DIP第5章知识点

图像增强&#xff1a;主要是一种 主观处理&#xff0c;而图像复原很大程度上是一种 客观处理。 5.1 图像退化/复原处理的一个模型 如图5.1 本章把图像退化建模为一个算子 H \mathcal{H} H 该算子 与一个加性噪声项 η ( x , y ) η(x,y) η(x,y) 共同对输入图像 f ( x , y…

Rust每日一练(Leetday0013) 解数独、外观数列、组合总和

目录 37. 解数独 Sudoku Solver &#x1f31f;&#x1f31f;&#x1f31f; 38. 外观数列 Count and Say &#x1f31f;&#x1f31f; 39. 组合总和 Combination Sum &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Gola…

常微分方程(ODE)求解方法总结

常微分&#xff08;ODE&#xff09;方程求解方法总结 1 常微分方程&#xff08;ODE&#xff09;介绍1.1 微分方程介绍和分类1.2 常微分方程得计算方法1.3 线性微分方程求解的推导过程 2 一阶常微分方程&#xff08;ODE&#xff09;求解方法2.1 欧拉方法2.1.1 欧拉方法的改进思路…