深度学习四大维度
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
?
- 一条边上有多个点的图
- 二阶超图: 平时使用的图
- 三阶超图:?
?
?
- 取那些识别不好的样本再次进行模型微调
- 直述:有监督学习里的真值,有效值,标准值
- 范数主要是对矩阵和向量的一种描述,有了描述那么“大小就可以比较了”,从字面理解一种比较构成规范的数。有了统一的规范,就可以比较了。
- 例如:1比2小我们一目了然,可是(3,5,3)和(6,1,2)哪个大?不太好比吧
- 矩阵范数:描述矩阵引起变化的大小,AX=B,矩阵X变化了A个量级,然后成为了B。
- 向量范数:描述向量在空间中的大小。更一般地可以认为范数可以描述两个量之间的距离关系。
- L-0范数:用来统计向量中非零元素的个数。
- L-1范数:向量中所有元素的绝对值之和。可用于优化中去除没有取值的信息,又称稀疏规则算子。
- L-2范数:典型应用――欧式距离。可用于优化正则化项,避免过拟合。
- L-∞范数:计算向量中的最大值。
?
- 直述:使得梯度不超过一个阈值
- 目的:解决梯度消失,梯度爆炸问题
- 公式:
- 把所有梯度接成一个向量g
- 假设裁剪的阈值是
- 则,裁剪使得||g||不会超过
- 矩阵奇异值的和,用于约束矩阵的低秩
- 对于稀疏性质的数据而言,其矩阵是低秩且会包含大量冗余信息
- 冗余信息可被用于恢复数据和提取特征
- 矩阵里的概念
- 一般通过奇异值分解定理求得
- 定义:设A为m*n阶矩阵,q=min(m,n), A*A的q个非负特征值的算数平方根,叫做A的奇异值
- 奇异值分解是线性代数和矩阵论中一种重要的矩阵分解法,适用于信号处理和统计学等领域
?
- L=D-A: D----度矩阵,A----领接矩阵
- 拉普拉斯矩阵是半正定矩阵
- 特征值中0出现的次数就是图连同区域的个数
- 最小特征值是0, 因为拉普拉斯矩阵每一行的和均为0
- 最小非零特征值是图的代数连通度
- 已知:数据和其一一对应的弱标签
- 目的:学习映射,将数据映射到更强的一组标签
- 解释:标签的强弱是指标签蕴含信息量的多少
- 例:已知图中有一只猪,学习住在哪,猪和背景的分界线
- 基准
- 直述:从二维图像中,估计出三维空间
- 我的出处:ECN。元学习时提及此方式。
- 原理:目标域的图片经网络题取出特征向量,存储到memory中;下一次新的即可和上次的做聚类;
- 公式:?(其中是随着epoch不断线性增加的:? ?PS:但为什么新特征的影响会越来越大?)
- 用处:
- ? ? ? ? ?1.Domain Adaptation,用新提取出的特征向量和旧的做聚类,可使模型在目标域上的泛化能力增强
- ? ? ? ? ?2.因为是在整个训练过程中不断积累,所以能够很好地传递全局性质,不仅仅只在一个batch中。
- 我的出处:ECN的主题。老师提及。语义分割也有此问题。? ? ? ? ? ?
- 描述:用源域训练数据得到模型,在目标域上的泛化能力不强。
- 背景:常常出现在无监督和半监督学习。
- 我的出处:师兄提到过,CVPR19的工作中,不仅有可以做多标签识别,还有做半监督的,所以有必要~
- 背景:可以把图(邻阶矩阵)做输入,以探究信息训练模型
- 原理:
? ? ? ? ? ? ? ? ?(1)输入:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1)特征矩阵?(节点数,每个结点的特征数)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2)邻阶矩阵A
? ? ? ? ? ? ? ? ? ?(2) 隐藏层的传播规则:? (:非线性激活函数,W:权重矩阵,决定了下一层的特征数)
- (补)拉普拉斯矩阵:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2)(GCN很多论文中用这种)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3)
- 相关名词:谱聚类,拉普拉斯矩阵,传播规则
- 我的出处:ECN修改预训练模型的时候,作者提及未懂。接下来时间又见到很多次。
- 背景:用深度网络比用浅层网络在训练集上的效果更差(不是过拟合:注意因为不是在测试集而是在训练集上)
- 作用:解决网络退化问题。即又保持了深的网络的高准确度,又避免了它会退化的问题。
- 实现:shortcut(identity mapping)(其实很简单:每一层不仅取决于上一层,还要取决于很久之前的层)
- 存在的问题:如果和的维度不一样怎么办? 那就做一层卷积升维或者降维再做加法运算。
- 相关名词:shortcut
- 我的出处:论文实验部分。pytorch有多种调节学习率的函数。
- 作用:调节梯度下降快慢。一般最开始值大,后续会减小。(太大会超过最优值,太小会下降得过慢)
- 相关名词:weight-decay(减小不重要参数对结果影响,即网络中有用的权重不会受到它的影响);momentum(当误差曲面在平坦区域,就可以更快学习);learning rate decay(提高SGD的寻优能力,学习率随着epoch的增大而减小)
- 我的出处:ECN的时候,作者在实验部分阐述用到的名词。还有郑哲东那篇baseline的文章。
- 我的理解:不加作者的技巧,干干净净的基础网络。
- 我的出处:ECN看实验的时候,提及对数据做的处理。pytorch有专门函数调用。
- 主要方法:
? ? ? ? ? ? ? ? ? ? ? ?(1)flip:翻转变换
? ? ? ? ? ? ? ? ? ? ? ?(2)random crop:随机修剪
? ? ? ? ? ? ? ? ? ? ? ?(3)color jitterjing:色彩抖动
? ? ? ? ? ? ? ? ? ? ? ?(4)shift:平移变换
? ? ? ? ? ? ? ? ? ? ? ?(5)scale:尺度变换
? ? ? ? ? ? ? ? ? ? ? ?(6)constrast:对比度变换
? ? ? ? ? ? ? ? ? ? ? ?(7)noise:噪声扰动
? ? ? ? ? ? ? ? ? ? ? ? ?(8) rotation/reflection:旋转变换/反射变换
? ? ? ? ? ? ? ? ? ? ? ?(9)random erasing:随机擦除
- 我的出处:ECN在做softmax时在指数项上加的分母
- 作用:平衡数据的分布
-
我的出处:ECN的整个训练模式
-
描述:用标签数据和未标签数据共同训练模型
-
过程:
? ? ? ? ? ? ? ? ? ? step1:用标签数据训练模型
? ? ? ? ? ? ? ? ? ? step2:用无标签数据训练上述模型,并打上伪标签
? ? ? ? ? ? ? ? ? ? step3:用标签数据和伪标签数据共同训练模型
- ?好处:
? ? ? ? ? ? ? ? ? ? ?(1)有标签数据太过昂贵
? ? ? ? ? ? ? ? ? ? ?(2)精确决策边界以改变模型的鲁棒性
-
相关名词:pseudo labelling(伪标签)
- 我的出处:ECN的memory损失函数计算
- 描述:使用某种方法未无标签的数据贴上标签,然后训练模型
- 方法:memory
- 我的出处:pytorch使用r涉及
- 我的出处:word2vec前的词向量语言模型
- 作用:用前几个词预测下一个词。词向量(输入层的参数)是这个过程重要的副产品。
- 具体:
? ? ? ? ? ? ? ? (1)输入:根据词典进行one-hot编码,输入。(不是输入好几个词预测下一个词吗?)
? ? ? ? ? ? ? ? (2)过程:循环输入前几个词,预测值,训练网络。
- 缺点:训练过程过慢(和Word2Vec比起)
- 我的出处:NPL第一个接触的重要名词
- 作用:用前几个词预测下一个词。词向量(输入层的参数)是这个过程重要的副产品。
- 结构:CBOW? ? +? ? Skip-gram
? ? ? ? ? ? ? ? ? (1)CBOW:(连续词袋模型)用上下文预测当前词。(将向量简单地加到一起,中间只有一层,迫使网络更加有效地生成词向量)
? ? ? ? ? ? ? ? ? (2)Skip-gram:用当前词词预测上下文
- 增加效率的方式(和NPLM比起来):Hierarchical Softmax
- 增加Loss效果的方式:负采样
- 调用库:gensim
- 我的出处:word2vec中CBOW的输入层的数据结构
- 作用:增加训练效率。查询变快,训练也变快。
- 原理:将输入层原来的扁平结构变成Huffman树。(NPLM只是更新一个词节点的权重,而Hierarchical Softmax从叶节点到连边的所有权重。)
- 我的出处:word2vec中CBOW的损失函数
- 公式:? (这个思想很多地方用到)
- 我的出处:为什么粲要选这里
- 特点:同层之间有循环,使信息能够保留,使网络具有记忆能力
- 公式(最简单的,以便理解):
? ? ? ? ? ? ? ? ? ? ? ? ? (1)输入层到隐含层:? ?(激励函数的项不仅有函数本身的,还有记忆遗留的)
? ? ? ? ? ? ? ? ? ? ? ? ? (2)隐含层到输出层:? ?(激励函数的还是普通的项)
- 缺点:
? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)记忆能力有限
? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)梯度消失,梯度爆炸(难以训练收敛)
- 序列生成问题:需要种子,训练和预测都需要循环
- 相关名词:LSTM(比起RNN神经元多了 输入门,输出门,遗忘门),GRU
- 补充:RNN既可关注到词语的含义也可关注到词语间的联系。
- 拓展:音乐生成模型网络
? ? ? ? ? ? ? ? ? ?网络架构:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)输
深度学习与计算机视觉教程(17) | 深度强化学习 (马尔可夫决策过程,Q-Learning,DQN)(CV通关指南·完结??)
深度视觉技术本文讲解了强化学习的主要挑战、数学定义及实际应用(制定长期决策、估计或者近似未来奖励、状态过多时估计或者近似未来奖励、从数据中学习模型使其真正工作等)【对应 CS231n Lecture 14】
- 作者:韩信子@ShowMeAI
- 教程地址:
- 本文地址:
- 声明:版权所有,转载请联系平台与作者并注明出处
- 收藏ShowMeAI查看更多精彩内容
本系列为 斯坦福CS231n 《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。
在监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)之外,我们还有另外一类机器学习算法,叫做「强化学习」。
- 监督学习:从外部监督者提供的带标注训练集中进行学习(任务驱动型)
- 无监督学习:寻找未标注数据中隐含结构的过程(数据驱动型)。
- 强化学习:「试探」与「开发」之间的折中权衡,智能体必须开发已有的经验来获取收益,同时也要进行试探,使得未来可以获得更好的动作选择空间(即从错误中学习)。强化学习也可以理解为有延迟标签(奖励)的学习方式。
目前强化学习在包括游戏,广告和推荐,对话系统,机器人等多个领域有着非常广泛的应用。我们会在下面再展开介绍。
- 强化学习概念与应用
- 马尔可夫决策过程
- Q-Learning 算法
- DQN(Deep Q Network)算法
强化学习是一类对目标导向的学习与决策问题进行理解和自动化处理的算法。它强调智能体通过与环境的直接互动来学习,无需像监督学习一样密集的样本级标签标注,通过奖励来学习合理的策略。
强化学习包含2个可以进行交互的对象:智能体(Agnet) 和 环境(Environment) ,它们的定义与介绍如下:
- 智能体(Agent) :可以感知环境的状态(State) ,并根据反馈的奖励(Reward) 学习选择一个合适的动作(Action) ,我们希望它能最大化长期总收益。
- 环境(Environment) :环境会接收智能体执行的一系列动作,对这一系列动作进行评价并转换为一种可量化的信号反馈给智能体。环境对智能体来说是一套相对固定的规则。
强化学习系统在智能体(Agnet) 和环境(Environment) 之外,还包含其他核心要素:策略(Policy) 、回报函数(Reward Function) 、价值函数(Value Function) 和环境模型(Environment Model)。
上述核心要素中「环境模型」是可选的。
- 策略(Policy) :智能体在环境中特定时间的行为方式,策略可以视作环境状态到动作的映射。
- 回报函数(Reward Function) :智能体在环境中的每一步,环境向其发送的1个标量数值,指代「收益」。
- 价值函数(Value Function) :表示了从长远的角度看什么是好的。一个状态的价值是一个智能体从这个状态开始,对将来累积的总收益的期望。
- 环境模型(Environment Model) :是一种对环境的反应模式的模拟,它允许对外部环境的行为进行推断。
AlphaGo 是于 2014 年开始由 Google DeepMind 开发的人工智能围棋软件。AlphaGo 在围棋比赛中战胜人类顶级选手取得成功,它包含了大量强化学习的算法应用,核心过程是使用蒙特卡洛树搜索(Monte Carlo tree search),借助估值网络(value network)与走棋网络(policy network)这两种深度神经网络,通过估值网络来评估大量选点,并通过走棋网络选择落点。
AlphaStar 是由 DeepMind 开发的玩 星际争霸 II 游戏的人工智能程序。它能够通过模仿学习星际争霸上玩家所使用的基本微观和宏观策略。这个初级智能体在 95% 的游戏中击败了内置的「精英」AI 关卡(相当于人类玩家的黄金级别)。
AlphaStar 神经网络结构将 Transformer 框架运用于模型单元(类似于关系深度强化学习),结合一个深度 LSTM 核心、一个带有 pointer network 的自回归策略前端和一个集中的值基线。超强的网络设计使得其适合长期序列建模和大输出空间(如翻译、语言建模和视觉表示)的挑战。它还还集成了多智能体学习算法。
OpenAI Five 是一个由 OpenAI 开发的用于多人视频游戏 f="">Dota 2 的人工智能程序。OpenAI Five 通过与自己进行超过 10,000 年时长的游戏进行优化学习,最终获得了专家级别的表现。
Pluribus 是由 Facebook 开发的第一个在六人无限注德州扑克中击败人类专家的 AI 智能程序,其首次在复杂游戏中击败两个人或两个团队。
在淘宝京东等电商领域与字节跳动等信息流产品里,也可以见到强化学习的有效应用,它使得广告投放与推荐更具智能化。
Alphago 的成功使人们看到了强化学习在序列决策上的巨大进步,这些进步进而推动了深度强化学习算法在自动语音和自然语言理解领域的研究和应用,探索解决自然语言理解及响应等开展对话中存在的挑战。基于深度强化学习的 Bot 具有扩展到当前尚无法涉足领域的能力,适用于开放域聊天机器人的场景。
复杂未知环境下智能感知与自动控制是目前机器人在控制领域的研究热点之一,在高维连续状态-动作空间中,运用深度强化学习进行机器人运动控制有很不错的效果,最终可以应用在自主导航、物体抓取、步态控制、人机协作以及群体协同等很多任务上。
首先,让我们简单介绍一下 Breakout 这个游戏。在这个游戏中,你需要控制屏幕底端的一根横杆左右移动,将飞向底端的球反弹回去并清除屏幕上方的砖块。每次你击中并清除了砖块,你的分数都会增加――你获得了奖励。
假设你想教神经网络模型玩这个游戏,模型的输入是游戏机屏幕像素所构成的图片,输出是三种动作:向左,向右以及开火(把球射出)。把这个问题建模为分类问题是很合理的――对于每个屏幕画面,你都需要进行决策:是左移,右移,还是开火。
分类的建模方法看起来很直接。不过,你需要大量训练数据训练你的分类模型。传统的做法是找一些专家让他们玩游戏并且记录他们的游戏过程。
但人类肯定不是这样玩游戏的,我们不需要有人站在我们背后告诉我们向左还是向右。我们只需要知道在某些情况下我们做了正确的动作并且得分了,其他的依靠我们自身的学习机制完成。这个问题就是强化学习尝试解决的问题。
强化学习处于监督学习与无监督学习的中间地带。在监督学习中,每个训练实例都有一个正确标签;在无监督学习中,训练实例并没有标签。在强化学习中,训练实例有稀疏并延时的标签――奖励。基于奖励,强化学习中的智能体可以学习如何对环境做出正确的反映。
上述的观点看起来很直观,但是实际存在很多挑战。举例来讲,在 Breakout 这个游戏中,击中砖块并且得分和前一时刻如何移动横杆没有直接关系。最相关的是前面如何将横杆移动到正确位置并反弹球。这个问题叫做信用分配问题(credit assignment problem),即:建模获得奖励之前的哪些动作对获得奖励产生贡献以及贡献的大小。
如果你已经获得了某种策略并且通过它得了不少奖励,你应该继续坚持这种策略还是试试其他的可能获得更高分的策略?仍举 Breakout 这个游戏为例,在游戏开始时,你把横杆停在左边并把球射出去,如果你不移动横杆,你总是能得 10 分的(当然得分的下一秒,你就死了)。你满足于这个得分吗,或者你想不想再多得几分?这种现象有一个专门的名词――探索-利用困境(exploration-exploitation dilemma) 。决策时应该一直延用现有的策略还是试试其他更好的策略?
强化学习是人类(或者更一般的讲,动物)学习的一种重要模式。父母的鼓励,课程的分数,工作的薪水――这些都是我们生活中的奖励。功劳分配问题以及探索-利用困境在我们日常生活工作中经常发生。这就是我们研究强化学习的原因。而对于强化学习,游戏是尝试新方法的最佳的沙盒。
下面,我们的问题是如何形式化定义强化学习问题使其支持推断。最常用的表示方式是马尔科夫决策过程。
假想你是一个智能体(agent),面对某种场景(比如说 Breakout 游戏)。你所处的环境可以定义为状态(state)(比如横杆的位置,球的位置,球的方向,当前环境中的砖块等等)。
智能体能够在环境中采取一些动作(actions)(比如向左或向右移动横杆)。这些动作会导致一些奖励(reward)(比如分数的增加)。智能体采取动作将导致新的环境,也就是新的状态。在新的状态下,智能体能够继续采取动作,循环往复。你采取行动的原则叫做策略(policy)。
通常来讲,环境是很复杂的,智能体的下一状态可能带有一定的随机性(比如当你失去一个球发射另一个球时,它的方向是随机的)。
一系列的状态、动作、以及采取动作的规则构成了一个马尔科夫决策过程(Markov decision process)。一个马尔科夫决策过程(比如一局游戏)由一串有限个数的状态、动作、反馈组成,形式化地表示为:
其中 代表状态, 代表动作, 代表进行动作后获得的奖励, 是终止状态。一个马尔科夫决策过程建立在马尔科夫假设上,即下一时刻的状态 只和当前状态 和动作 有关,和之前的状态及动作无关。
为了在长期决策过程中表现的更好,我们不但要考虑采取一个动作后的即时奖励,也要考虑这个动作的未来奖励。那么问题来了,我们应该如何建模这个未来奖励?
给定一个马尔科夫决策过程,它对应的奖励总和很容易用如下方式计算:
而 时刻的未来奖励可以表示为:
由于智能体所处的环境非常复杂,我们甚至无法确定在两次采取相同动作,智能体能够获得相同的奖励。智能体在未来进行的动作越多,获得的奖励越不相同。所以,我们一般采用一种「打折的未来奖励」作为 时刻未来奖励的代替。
其中 是 到 之间的折扣因子。这个 值使得我们更少地考虑哪些更长远未来的奖励。数学直觉好的读者可以很快地看出 可以用 来表示,从而将上式写成一种递推的形式,即:
如果 是 ,我们将会采取一种短视的策略。也就是说,我们只考虑即刻奖励。如果我们希望在即刻奖励与未来奖励之间寻求一种平衡,我们应该使用像 这样的参数。如果我们所处的环境对于动作的奖励是固定不变的,也就是说相同的动作总会导致相同的奖励,那么 应该等于 。
好的策略应该是:智能体在各种环境下采用最大(打折的)未来奖励的策略。
在 Q-learning 中,我们定义一个 函数,用来表示智能体在 状态下采用 动作并在之后采取最优动作条件下的打折的未来奖励。
直观讲, 是智能体「在 状态下采取 动作所能获得的最好的未来奖励」。由于这个函数反映了在 状态下采取 动作的质量(Quality),我们称之为Q-函数。
这个定义看起来特别奇怪。我们怎么可能在游戏进行的过程中,只凭一个状态和动作估计出游戏结束时的分数呢?实际上我们并不能估计出这个分数。但我们可以从理论上假设这样函数的存在,并且把重要的事情说三遍,「Q-函数存在,Q-函数存在,Q-函数存在」。Q-函数是否存在呢?
如果你还不相信,我们可以在假设Q-函数存在的情况下想一想会发生什么。假设智能体处在某个状态并且思考到底应该采用 动作还是 动作,你当然希望选取使游戏结束时分数最大的动作。如果你有那个神奇的Q-函数,你只要选取Q-函数值最大的动作。
上式中, 表示在 状态下选取动作的策略。
然后,我们应该如何获得Q-函数呢?首先让我们考虑一个转移 <s, a, r, s’>
。我们可以采用与打折的未来奖励相同的方式定义这一状态下的Q函数。
这个公式叫贝尔曼公式。如果你再想一想,这个公式实际非常合理。对于某个状态来讲,最大化未来奖励相当于最大化即刻奖励与下一状态最大未来奖励之和。
Q-learning 的核心思想是:我们能够通过贝尔曼公式迭代地近似Q-函数。最简单的情况下,我们可以采用一种填表的方式学习Q-函数。这个表包含状态空间大小的行,以及动作个数大小的列。填表的算法伪码如下所示:
initialize Q[numstates,numactions]arbitrarily observe initial state s repeat select and carry out an action a observe reward r and new state s' Q[s,a]=Q[s,a]+ α(r + γmaxa' Q[s',a']- Q[s,a]) s=s' until terminated
Al gorithm 5 Q-learning 迭代算法
其中 是在更新 时,调节旧 与新 比例的学习速率。如果, 就被消掉,而更新方式就完全与贝尔曼公式相同。
使用 作为未来奖励来更新 只是一种近似。在算法运行的初期,这个未来奖励可能是完全错误的。但是随着算法迭代, 会越来越准(它的收敛性已经被证明)。我们只要不断迭代,终有一天它会收敛到真实的Q函数的。
我们来通过一个小案例理解一下 Q-Learning 算法是如何应用的。
假设我们有5个相互连接的房间,并且对每个房间编号,整个房间的外部视作房间5。
以房间为节点,房门为边,则可以用图来描述房间之间的关系:
这里设置一个agent(在强化学习中, agent 意味着与环境交互、做出决策的智能体), 初始可以放置在任意一个房间, agent最终的目标是走到房间5(外部)。
为此, 为
深度学习部署神器——triton-inference-server入门教程指北
开新坑!准备开始聊triton。
老潘用triton有两年多了,一直想写个教程给大家。顺便自己学习学习,拖了又拖,趁着这次换版本的机会,终于有机会了写了。
triton作为一个NVIDIA开源的商用级别的服务框架,个人认为很好用而且很稳定,API接口的变化也不大,我从2020年的20.06切换到2022年的22.06,两个大版本切换,一些涉及到代码的工程变动很少,稍微修改修改就可以直接复用,很方便。
本系列讲解的版本也是基于22.06。
本系列讲解重点是结合实际的应用场景以及源码分析,以及写一些triton周边的插件、集成等。非速成,适合同样喜欢深入的小伙伴。
肯定很多人想知道triton干啥的,学习这个有啥用?这里简单解释一下:
triton可以充当服务框架去部署你的深度学习模型,其他用户可以通过http或者grpc去请求,相当于你用flask搭了个服务供别人请求,当然相比flask的性能高很多了 triton也可以摘出C-API充当多线程推理服务框架,去除http和grpc部分,适合本地部署多模型,比如你有很多模型要部署,然后分时段调用,或者有pipeline,有了triton就省去你处理显存、内存和线程的麻烦
注意,还有一个同名的triton[1]是GPU编程语言,类似于TVM的TVMscript,需要区分,这篇文章中的triton指的是triton inference server
借用官方的图,triton的使用场景结构如下:
涉及到运维部分,我也不是很懂,抛去K8S后,结构清爽了些:
通过上述的两个结构图,可以大概知道triton的一些功能和特点:
支持HTTP/GRPC 支持多backend,TensorRT、libtorch、onnx、paddle、tvm啥的都支持,也可以自己custom,所以理论上所有backend都可以支持 单GPU、多GPU都可以支持,CPU也支持 模型可以在CPU层面并行执行 很多基本的服务框架的功能都有,模型管理比如热加载、模型版本切换、动态batch,类似于之前的tensorflow server 开源,可以自定义修改,很多问题可以直接issue,官方回复及时 NVIDIA官方出品,对NVIDIA系列GPU比较友好,也是大厂购买NVIDIA云服务器推荐使用的框架 很多公司都在用triton,真的很多,不管是互联网大厂还是NVIDIA的竞品都在用,用户多代表啥不用我多说了吧
两年前开始学习的时候,官方资料比较匮乏, 只能通过看源码来熟悉triton的使用方式,所幸知乎上有个关于TensorRT serving不错的教程[2],跟着看了几篇大致了解了triton的框架结构。那会triton叫做TensorRT serving,专门针对TensorRT设计的服务器框架,后来才变为triton,支持其他推理后端的。
现在triton的教程比较多了,官方的docs写着比较详细,还有issue中各种用例可以参考,B站上也有视频教程[3],比两年前的生态要好了不少。
当然,最重要的,还是上手使用,然后看源码, 然后客制化。
从triton的源码中可以学到:
C++各种高级语法 设计模式 不同backend(libtorch、TensorRT、onnxruntime等)如何正确创建推理端,如何多线程推理 C++多线程编程/互斥/队列 - 版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。