前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Hive 高频考点讲解

Hive 高频考点讲解

作者头像
sowhat1412
发布于 2022-09-20 08:33:31
发布于 2022-09-20 08:33:31
1.2K00
代码可运行
举报
文章被收录于专栏:sowhat1412sowhat1412
运行总次数:0
代码可运行

1 Hive

Hive 是 FaceBook 开源的一款基于 Hadoop 数据仓库工具,它可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。

The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL 。

1.1 Hive 优缺点

1.1.1 优点
  1. 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。
  2. 避免了去写MapReduce,减少开发人员的学习成本。
  3. Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。
  4. Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。
  5. Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
1.1.2 缺点
  1. Hive 的 HQL 表达能力有限,无法表达迭代式算法,不擅长数据挖掘方面。
  2. Hive 的效率比较低,Hive 自动生成的 MapReduce 作业,通常情况下不够智能化。
  3. Hive 查询无法做到跟 MySQL 一样毫秒返回。

1.2 Hive 跟 MySQL 比较

1.2.1 对比

Hive 采用了类SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

方向

Hive

MySQL

应用方向

数仓

Online

查询语言

HQL

SQL

数据存储位置

HDFS

本地文件系统

数据更新

读多写少,无法修改

正常CRUD

索引

无索引,暴力查询

各种索引

执行

底层MapReduce

自己执行引擎

延迟

高延迟

低延迟

可扩展性

优秀扩展能力

扩展力有限

数据量

超大规模

小规模

1.2.2 Hive 不支持那些

  1. 支持等值查询,不支持非等值连接
  2. 支持 and 多条件过滤,不支持 or 多条件过滤。
  3. 不支持 update 跟 delete。

1.3 Hive 底层

Hive 底层是 MapReduce 计算框架,Hive 只是将通读性强且容易编程的SQL语句通过 Hive 软件转换成MapReduce 程序在集群上执行,Hive 可以看做 MapReduce 客户端。操作的数据还是存储在HDFS上的,而用户定义的表结构等元信息被存储到 MySQL 上了。以前要写八股文 MapReduce 程序,现在只需要HQL查询就可!

Hive整体框架

  1. 用户接口 Client

CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)

  1. 元数据 Metastore
  2. 元数据包括 表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。
  3. 默认存储在自带的derby数据库中(单客户连接),推荐使用MySQL存储Metastore。
  4. Hadoop 使用HDFS进行存储,使用MapReduce进行计算。
  5. 驱动器 Driver

  1. 解析器 SQL Parser:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
  2. 编译器 Physical Plan:将AST编译生成逻辑执行计划。
  3. 优化器 Query Optimizer:对逻辑执行计划进行优化。
  4. 执行器 Execution:把逻辑执行计划转换成可以运行的物理计划。对于Hive来说就是MR/Spark

HQL执行流程

不要把 Hive 想的多么神秘,你可以用简单的load方式将数据加载到创建的表里,也可以直接用hadoop指令将数据放入到指定目录,这两种方式都可以直接让你通过SQL查询到数据。

1.4 HQL 底层执行举例

1.4.1 Join

Join流程

1.4.2 group by

group by 流程

1.4.3 distinct

distinct 流程

2 开窗函数

有时想要同时显示聚集前后的数据,这时引入了窗口函数,在SQL处理中,窗口函数都是最后一步执行,而且仅位于 Order by 字句之前。

2.1 数据准备

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name,orderdate,cost
jack,2017-01-01,10
tony,2017-01-02,15
jack,2017-02-03,23
tony,2017-01-04,29
jack,2017-01-05,46
jack,2017-04-06,42
tony,2017-01-07,50
jack,2017-01-08,55
mart,2017-04-08,62
mart,2017-04-09,68
neil,2017-05-10,12
mart,2017-04-11,75
neil,2017-06-12,80
mart,2017-04-13,94

建表 导数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table business(
name string, 
orderdate string,
cost int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
load data local inpath "/opt/module/datas/business.txt" into table business;

2.2 用法

相关函数说明

  1. OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化
  2. CURRENT ROW:当前行
  3. n PRECEDING:往前 n 行数据
  4. n FOLLOWING:往后 n 行数据
  5. UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING 表示到后面的终点

上面写 over 里面,下面写 over 前面。

  1. LAG(col,n):往前 n 行数据
  2. LEAD(col,n):往后 n 行数据
  3. NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE 返回此行所属的组的编号。注意:n必须为int类型。

2.3 开窗函数demo

  1. 查询在2017年4月份购买过的顾客及总人数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,count(*) over() from business where substring(orderdate,1,7) = '2017-04' group by name;
结果:
mart    2
jack    2
  1. 查询顾客的购买明细及月购买总额
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,sum(cost) over(partition by month(orderdate)) 
from business; 
解释:按照月划分数据  然后统计这个月的cost总和
jack    2017-01-01  10  205
jack    2017-01-08  55  205
tony    2017-01-07  50  205
jack    2017-01-05  46  205
tony    2017-01-04  29  205
tony    2017-01-02  15  205
jack    2017-02-03  23  23
mart    2017-04-13  94  341
jack    2017-04-06  42  341
mart    2017-04-11  75  341
mart    2017-04-09  68  341
mart    2017-04-08  62  341
neil    2017-05-10  12  12
neil    2017-06-12  80  80
  1. 查看顾客上次的购买时间
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost, 
lag(orderdate,1,'defaulttime') over(partition by name order by orderdate ) as time1, 
lag(orderdate,2,'defaulttime') over (partition by name order by orderdate) as time2  from business;
结果 : 
姓名      日期      价格  前一天日期    前两天日期
jack    2017-01-01  10  defaulttime defaulttime
jack    2017-01-05  46  2017-01-01  defaulttime
jack    2017-01-08  55  2017-01-05  2017-01-01
jack    2017-02-03  23  2017-01-08  2017-01-05
jack    2017-04-06  42  2017-02-03  2017-01-08
mart    2017-04-08  62  defaulttime defaulttime
mart    2017-04-09  68  2017-04-08  defaulttime
mart    2017-04-11  75  2017-04-09  2017-04-08
mart    2017-04-13  94  2017-04-11  2017-04-09
neil    2017-05-10  12  defaulttime defaulttime
neil    2017-06-12  80  2017-05-10  defaulttime
tony    2017-01-02  15  defaulttime defaulttime
tony    2017-01-04  29  2017-01-02  defaulttime
tony    2017-01-07  50  2017-01-04  2017-01-02
  1. 查询前20%时间的订单信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 select * from (
 select name,orderdate,cost, ntile(5) over(order by orderdate) sorted from business ) t where sorted = 1;
结果 : 
jack    2017-01-01  10  1
tony    2017-01-02  15  1
tony    2017-01-04  29  1
jack    2017-01-05  46  2
tony    2017-01-07  50  2
jack    2017-01-08  55  2
jack    2017-02-03  23  3
jack    2017-04-06  42  3
mart    2017-04-08  62  3
mart    2017-04-09  68  4
mart    2017-04-11  75  4
mart    2017-04-13  94  4
neil    2017-05-10  12  5
neil    2017-06-12  80  5

以下实验均关注最后一列

1. 所有行相加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,sum(cost) over() as sample1 from business; 
结果 : 
mart    2017-04-13  94  661
neil    2017-06-12  80  661
mart    2017-04-11  75  661
neil    2017-05-10  12  661
mart    2017-04-09  68  661

2. 按name分组,组内数据相加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,sum(cost) over(partition by name) as sample2
from business;
结果 : 
jack    2017-01-05  46  176
jack    2017-01-08  55  176
jack    2017-01-01  10  176
jack    2017-04-06  42  176
jack    2017-02-03  23  176
...
tony    2017-01-04  29  94
tony    2017-01-02  15  94
tony    2017-01-07  50  94

3. 按name分组,组内数据累加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,
sum(cost) over(partition by name order by orderdate) as sample3
from business; 
跟下面类似
select name,orderdate,cost,
sum(cost) over(distribute by name sort by orderdate) as sample3 
from business; 
jack    2017-01-01  10  10
jack    2017-01-05  46  56
jack    2017-01-08  55  111
jack    2017-02-03  23  134
jack    2017-04-06  42  176
...

4. 和sample3一样,由起点到当前行的聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,
sum(cost) over(partition by name order by orderdate rows
between UNBOUNDED PRECEDING and current row ) as sample4 
from business; 
结果 : 
jack    2017-01-01  10  10
jack    2017-01-05  46  56
jack    2017-01-08  55  111
jack    2017-02-03  23  134
jack    2017-04-06  42  176
...

5. 当前行和前面一行做聚合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,
sum(cost) over(partition by name order by orderdate rows 
between 1 PRECEDING and current row) as sample5 
from business;
结果 : 
jack    2017-01-01  10  10
jack    2017-01-05  46  56 = 46 + 10
jack    2017-01-08  55  101 = 44 + 46
jack    2017-02-03  23  78  = 23 + 55
jack    2017-04-06  42  65  = 42 + 23
...
tony    2017-01-02  15  15
tony    2017-01-04  29  44
tony    2017-01-07  50  79

6. 当前行和前边一行及后面一行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,
sum(cost) over(partition by name order by orderdate rows
between 1 PRECEDING AND 1 FOLLOWING ) as sample6
from business;
结果 : 
jack    2017-01-01  10  56  = 10 + 46
jack    2017-01-05  46  111 = 46 + 10 + 55
jack    2017-01-08  55  124 = 55 + 46 + 23
jack    2017-02-03  23  120 = 23 + 55 + 42
jack    2017-04-06  42  65  = 42 + 23
...
tony    2017-01-02  15  44
tony    2017-01-04  29  94
tony    2017-01-07  50  79

7. 当前行及后面所有行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,orderdate,cost,sum(cost) over(partition by name order by orderdate rows between current row and UNBOUNDED FOLLOWING ) as sample7 from business;
结果 : 
jack    2017-01-01  10  176 = 10 + 46 + 55 + 23 + 42
jack    2017-01-05  46  166 = 46 + 55 + 23 + 42
jack    2017-01-08  55  120 = 55 + 23 + 42
jack    2017-02-03  23  65  =  23 + 42
jack    2017-04-06  42  42  =  42
mart    2017-04-08  62  299
mart    2017-04-09  68  237
mart    2017-04-11  75  169
mart    2017-04-13  94  94
neil    2017-05-10  12  92
neil    2017-06-12  80  80
tony    2017-01-02  15  94
tony    2017-01-04  29  79
tony    2017-01-07  50  50

2.4 Rank

函数说明

rank():排序相同时会重复,总数不会变 dense_rank():排序相同时会重复,总数会减少 row_number():会根据顺序计算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select name,subject,score,
rank() over(partition by subject order by score desc) rp,
dense_rank() over(partition by subject order by score desc) drp,
row_number() over(partition by subject order by score desc) rmp
from score;
结果 : 
name   subject score    rp      drp     rmp
孙悟空   数学    95      1       1       1
宋宋    数学    86      2       2       2
婷婷    数学    85      3       3       3
大海    数学    56      4       4       4
宋宋    英语    84      1       1       1
大海    英语    84      1       1       2
婷婷    英语    78      3(跳过22        3
孙悟空  英语    68      4       3(总数少)  4
大海    语文    94      1       1       1
孙悟空  语文    87      2        2        2
婷婷    语文    65      3       3       3
宋宋    语文    64      4       4       4
2.5 行转列
  1. CONCAT(string A, string B):

返回输入字符串连接后的结果,支持任意个输入字符串;

  1. CONCAT_WS(separator, str1, str2,…): 特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。
  2. COLLECT_SET(col): 只接受基本数据类型,主要作用是将某字段的值进行去重汇总,产生array类型字段。多行汇总成一个array类型。

2.6 列转行

  1. EXPLODE(col):

将hive一列中复杂的array或者map结构拆分成多行。

  1. LATERAL VIEW 用法:LATERAL VIEW udtf(expression) table Alias AS columnAlias 解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

3 Hive 调优

3.1 MapJoin

如果不指定 MapJoin 或者不符合 MapJoin 的条件,那么 Hive 解析器会将 Join 操作转换成 Common Join,也就是在Reduce阶段完成join。容易发生数据倾斜。可以用 MapJoin 把小表全部加载到内存在map 端进行 join,避免 reducer 处理。

3.2 行列过滤

列处理:在SELECT时只拿需要的列,尽量使用分区过滤,少用SELECT *。 行处理:在分区剪裁中,当使用外关联时,如果将副表的过滤条件写在 Where后面,那么就会先全表关联,之后再过滤。

3.3 合理设置Map数跟Reduce数

3.3.1 map数不是越多越好

如果一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费 。而且,同时可执行的map数是受限的。此时我们就应该减少map数量。

3.3.2 Reduce数不是越多越好
  1. 过多的启动和初始化Reduce也会消耗时间和资源;
  2. 有多少个Reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;
  3. Reduce个数设置考虑这两个原则:处理大数据量利用合适的Reduce数;使单个Reduce任务处理数据量大小要合适;

3.4 严格模式

严格模式 strict 下会有以下特点:

  1. 对于分区表,用户不允许扫描所有分区。
  2. 使用了order by语句的查询,要求必须使用limit语句。
  3. 限制笛卡尔积的查询。

3.5 开启map端combiner

在不影响最终业务逻辑前提下,手动开启 set hive.map.aggr=true;

3.6 压缩

设置map端输出中间结果压缩,加速网络传输。

3.7 小文件进行合并

在Map执行前合并小文件,减少Map数,CombineHiveInputFormat 具有对小文件进行合并的功能(系统默认的格式)。HiveInputFormat没有对小文件合并功能。

3.8 其他

  1. Fetch抓取:指的是 Hive中对某些情况的查询可以不必使用MapReduce计算。
  2. 本地模式:Hive可以通过本地模式在单台机器上处理所有的任务。
  3. 数据分区:数据细化存储方便访问。
  4. JVM重用:JVM实例在同一个job中重新使用N次。
  5. 推测执行:根据一定的法则推测出拖后腿的任务,并为这样的任务启动一个备份任务。
  6. 并行执行:一个Hive查询被分解成多个阶段,阶段之间并非完全互相依赖的。

4 Hive 高频考点

4.1 数据倾斜

4.1.1 定义

数据分布不平衡,某些地方特别多,某些地方又特别少,导致的在处理数据的时候,有些很快就处理完了,而有些又迟迟未能处理完,导致整体任务最终迟迟无法完成,这种现象就是数据倾斜。

4.1.2 产生
  1. key的分布不均匀或者说某些key太集中
  2. 业务数据自身的特性,例如不同数据类型关联产生数据倾斜
  3. SQL语句导致的数据倾斜
4.1.3 解决
  1. 不影响最终业务逻辑前提下开启map端combiner。
  2. 开启数据倾斜时负载均衡
  3. 手动抽查做好分区规则。
  4. 使用mapjoin,小表进内存 在Map端完成Reduce。

4.2 分区表和分桶表对比?

4.2.1 分区表
  1. 分区使用的是表外字段,需要指定字段类型
  2. 分区通过关键字 partitioned by(partition_name string)声明
  3. 分区划分粒度较粗
  4. 将数据按区域划分开,查询时不用扫描无关的数据,加快查询速度
4.2.2 分桶表

分桶逻辑:对分桶字段求哈希值,用哈希值与分桶的数量取余决定数据放到哪个桶里。

  1. 分桶使用的是表内字段,已经知道字段类型,不需要再指定。
  2. 分桶表通过关键字 clustered by(column_name) into … buckets声明
  3. 分桶是更细粒度的划分、管理数据,可以对表进行先分区再分桶的划分策略
  4. 优点在于用于数据取样时候能够起到优化加速的作用

4.3 动态分区

  1. 静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。
  2. 静态分区的列是在编译时期,通过用户传递来决定的,动态分区只有在 SQL 执行时才能决定。
  3. 系统默认开启,非严格模式,动态分区最大值。

4.4 Hive 中视图跟索引

4.4.1 视图

视图是一种使用查询语句定义的虚拟表,是数据的一种逻辑结构,创建视图时不会把视图存储到磁盘上,定义视图的查询语句只有在执行视图的语句时才会被执行。视图是只读的,不能向视图中插入或是加载数据

4.4.2 Hive索引

Hive支持在表中建立索引。但是索引需要额外的存储空间,因此在创建索引时需要考虑索引的必要性。

Hive不支持直接使用 DROP TABLE 语句删除索引表。如果创建索引的表被删除了,则其对应的索引和索引表也会被删除;如果表的某个分区被删除了,则该分区对应的分区索引也会被删除。

4.5 Sort By、Order By、Distrbute By、Cluster By

  1. Sort By:分区内有序
  2. Order By:全局排序,只有一个Reducer
  3. Distrbute By:类似MR中Partition,进行分区,结合sort by使用
  4. Cluster By:当Distribute by和Sorts by字段相同时,可以使用Cluster by方式。Cluster by 还兼具 Sort by 的功能,但只能是升序排序。

4.6 内部表 跟外部表

4.6.1 内部表

如果Hive中没有特别指定,则默认创建的表都是管理表,也称内部表。由Hive负责管理表中的数据,管理表不共享数据。删除管理表时,会删除管理表中的数据和元数据信息。

4.6.2 外部表

当一份数据需要被共享时,可以创建一个外部表指向这份数据。删除该表并不会删除掉原始数据,删除的是表的元数据。

4.7 UDF 、UDAF、UDTF

  1. UDF :一进一出,类似 upper,trim
  2. UDAF:多进一出,聚集函数,类似 count、max、min。
  3. UDTF:一进多出,如 lateral view explore()

4.8 HQL 如何转变为MapReduce

  1. Antlr定义SQL语法规则,完成SQL词法,语法解析,SQL转化为 抽象语法树 AST Tree。
  2. 遍历AST Tree,抽象出查询的基本组成单元QueryBlock。
  3. 遍历QueryBlock,翻译为执行操作树OperatorTree。
  4. 逻辑层优化OperatorTree变换,合并不必要的ReduceSinkOperator,减少Shuffle数量。
  5. 遍历OperatorTree 翻译为MapReduce任务。
  6. 物理层优化器进行MapReduce任务变换,生成最终执行计划。

源网侵删

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 sowhat1412 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)
在混合专家模型 Mixtral 发布后,混合专家模型(MoE)越来越受到人们的关注。在稀疏化的混合专家语言模型中,大部分组件都与传统的 transformers 相同。然而,尽管看似简单,但经验表明,稀疏混合专家语言模型训练的稳定性还存在着一些问题。
机器之心
2024/02/26
1.6K0
手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)
【谷歌ICML】简单初始化,训练10000层CNN
【新智元导读】如何快速简单地训练神经网络?谷歌大脑研究人员研究了CNN的可训练性,提出了一种简单的初始化策略,不需要使用残差连接或批标准化,就能训练10000层的原始CNN。作者表示,他们的这项工作清除了在训练任意深度的原始卷积网络时存在的所有主要的障碍。
新智元
2018/07/31
6200
【谷歌ICML】简单初始化,训练10000层CNN
使用PyTorch实现混合专家(MoE)模型
Mixtral 8x7B 的推出在开放 AI 领域引发了广泛关注,特别是混合专家(Mixture-of-Experts:MoEs)这一概念被大家所认知。混合专家(MoE)概念是协作智能的象征,体现了“整体大于部分之和”的说法。MoE模型汇集了各种专家模型的优势,以提供更好的预测。它是围绕一个门控网络和一组专家网络构建的,每个专家网络都擅长特定任务的不同方面
deephub
2024/01/10
1.5K0
使用PyTorch实现混合专家(MoE)模型
稀疏性在机器学习中的发展趋势:MoE、稀疏注意力机制
每天给你送来NLP技术干货! ---- 作者:唐工 来源:https://zhuanlan.zhihu.com/p/463352552 编辑:李rumor Sparsity, ..., is another important algorithmic advance that can greatly improve efficiency. 稀疏性,是(神经架构搜索)之外另一个重要的算法进步,可以大大提高效率。The use of sparsity in models is ... very high po
zenRRan
2022/03/15
6.3K0
一个神经网络学习一切!谷歌又放了个大卫星(附论文)
李林 问耕 编译自 Arxiv 量子位 出品 | 公众号 QbitAI 最近,Google又在论文题目上口出狂言:One Model To Learn Them All,一个模型什么都能学。 非营利研究机构OpenAI的研究员Andrej Karpathy在Twitter上评论说,Google在把自己整个变成一个大神经网络的路上,又前进了一步。 这个题目,可以说继“Attention Is All You Need”之后,再为标题党树立新标杆,量子位作为媒体自愧不如。 这篇最近预发表在Arxiv上的论文说
量子位
2018/03/29
9130
一个神经网络学习一切!谷歌又放了个大卫星(附论文)
微软研究院推出“Tutel”:一个促进大规模 DNN(深度神经网络)模型开发的高性能 MoE 库
“专家混合 (MoE) 架构是一种深度学习模型架构,其中计算成本与参数数量成正比,允许更简单的扩展”。MoE 是目前唯一一种已被证明可以将深度学习模型扩展到数万亿个参数的方法,为能够学习更多信息的模型铺平了道路,并为计算机视觉、语音识别、自然语言处理和机器翻译系统等提供动力可以以新的方式帮助人们和组织的应用程序。
代码医生工作室
2021/12/01
1.4K0
微软研究院推出“Tutel”:一个促进大规模 DNN(深度神经网络)模型开发的高性能 MoE 库
零样本学习超越CLIP!谷歌提出首个多模态稀疏化模型LIMoE,还能降低计算成本
明敏 发自 凹非寺 量子位 | 公众号 QbitAI 多模态模型常见,但是基于稀疏化的还是头一个。 谷歌带来最新成果LIMoE,首次将稀疏化方法用在了图像文本混合模型上。 要知道,随着大模型参数呈指数级增加,训练成本也是一路飙升。 所以如何降低训练成本,成为了目前学界重点关注的一个问题。 谷歌想到的办法,不是拼硬件,而是从模型本身入手。 利用稀疏化的方法,让每次输入只需激活部分网络就能完成任务。 它们在模型内部设置了很多“专家”,每个“专家”只需处理对应部分的输入,根据任务情况按需使用“专家”就好。 这样一
量子位
2022/06/13
3060
零样本学习超越CLIP!谷歌提出首个多模态稀疏化模型LIMoE,还能降低计算成本
大模型理论基础(so-large-lm)课程笔记!
在当前信息时代,大型语言模型(Large Language Models,LLMs)的发展速度和影响力日益显著。随着技术进步,我们见证了从基本的Transformer架构到更为复杂和高效的模型架构的演进,如Mixture of Experts (MOE) 和Retrieval-Augmented Generation (RAG)。这些进步不仅推动了人工智能领域的边界,也对理解和应用这些技术提出了新的要求。
Datawhale
2024/04/24
3020
大模型理论基础(so-large-lm)课程笔记!
深度揭秘爆火MoE!GPT-4关键架构,成开源模型逆袭杀手锏
Mistral上周末丢出的磁力链接震惊了开源圈子,这个7B×8E的开源MoE大模型性能已经到达了LLaMA2 70B的级别!
新智元
2023/12/12
8370
深度揭秘爆火MoE!GPT-4关键架构,成开源模型逆袭杀手锏
无需额外训练,基于 Llama-2模型,通过 Model-GLUE 实现大规模语言模型的聚合与集成 !
大型语言模型(LLMs)在各种自然语言任务上展示了无与伦比的性能,涵盖了常识推理、问答以及甚至像数学和编程等专业化领域。LLM的有效性基于扩展定律,该定律提出,模型和训练数据规模的增加与模型性能的提升相关[27]。然而,随着LLM继续扩展,计算开销和数据需求也在增加。
AIGC 先锋科技
2024/11/08
1400
无需额外训练,基于 Llama-2模型,通过 Model-GLUE 实现大规模语言模型的聚合与集成  !
500亿参数,支持103种语言:谷歌推出「全球文字翻译」模型
在过去的几年里,由于神经机器翻译(NMT)的发展,机器翻译(MT)系统的质量得到了显著提升,打破了世界各地的语言障碍。但 NMT 的成功很大程度上要归功于有监督的训练数据。那么,数据较少甚至没有数据的语言该怎么办呢?多语言 NMT 是一种有效的解决方法,它有一种归纳偏见,即「来自一种语言的学习信号应该有助于提高其他语言的翻译质量」。
机器之心
2019/10/15
6040
500亿参数,支持103种语言:谷歌推出「全球文字翻译」模型
【Facebook AI && 含源码】有史以来第一个赢得WMT的多语言模型
相信大家在阅读paper时都会或多或少的用到Google、百度、有道等翻译软件,你可能会发现近几年的翻译准确率变高了。其实这都得益于深度学习在机器翻译这一领域快速的发展和应用。在机器翻译(MT)研究领域中,构建一个通用的翻译系统来帮助每个人更好的获取信息和交流是其研究的终极目标。 但是目前MT领域研究首先要做的是解决基本的问题,才能使未来成为现实。
ShuYini
2021/11/26
6260
大模型系列之解读MoE
Mixtral 8x7B 的推出, 使我们开始更多地关注 基于MoE 的大模型架构, 那么,什么是MoE呢?
半吊子全栈工匠
2024/05/07
1.6K0
大模型系列之解读MoE
如何高效训练 Transformer?微软亚研院开源TorchScale工具包
近期,微软亚洲研究院从深度学习基础理论出发,研发并推出了 TorchScale 开源工具包。TorchScale 工具包通过采用 DeepNet、Magneto 和 X-MoE 等最先进的建模技术,可以帮助研究和开发人员提高建模的通用性和整体性能,确保训练模型的稳定性及效率,并允许以不同的模型大小扩展 Transformer 网络。 如今,在包括语音、自然语言处理(NLP)、计算机视觉(CV)、多模态模型和 AI for Science 等领域的研究中,Transformer 已经成为一种通用网络结构,加速
AI科技大本营
2023/02/23
5280
如何高效训练 Transformer?微软亚研院开源TorchScale工具包
吸引机器学习圈眼球的MoE,会成为 NLP 与 CV 的未来吗?
在过去的十几年里,受到算法设计、数据、算力三大关键因素的推动,深度学习取得了突破性进展,极大地变革了图像分类、机器翻译等领域。 然而在这个过程中,大模型以及数据集的使用是以大量计算需求为代价的。过往的一些研究表明,增强模型的泛化能力以及稳健性离不开大模型的支持,因此,在训练大模型的同时协调好与训练资源的限制非常重要。 一种可行的方法是利用条件计算,该方法不是为单个输入激活整个网络,而是根据不同的输入激活模型的不同部分。这一范式已经在谷歌提出的 Pathway(一种全新的 AI 解决思路,它可以克服现有系统
机器之心
2022/07/04
1.1K0
吸引机器学习圈眼球的MoE,会成为 NLP 与 CV 的未来吗?
谷歌新语言模型Switch Transformer
在过去的三年中,基于transformer的语言模型(LMs)在自然语言处理(NLP)领域一直占据着主导地位。Transformer 通常是在大量非结构化文本上预先训练的巨大网络,它能够捕捉有用的语言属性。然后,我么可以对预先训练的模型进行微调,以适应各种各样的最终任务,如回答问题或机器翻译,通过微调即使是在少量的标记数据上也可以训练出可用的模型。Switch Transformer发布前,谷歌的T5模型一直是多个NLP基准上的记录保持者,但是最近被它自己的Switch Transformer超越。
deephub
2021/02/12
9840
谷歌新语言模型Switch Transformer
Moirai-MoE: 稀疏混合专家赋能时间序列基础模型
论文标题:Moirai-MoE: Empowering Time Series Foundation Models with Sparse Mixture of Experts
时空探索之旅
2024/11/19
2210
Moirai-MoE: 稀疏混合专家赋能时间序列基础模型
北大校友“炼丹”分享:OpenAI如何训练千亿级模型?
“炼大模型”已成为人工智能领域的主流研发趋势。从GPT-3的1750亿,到如今悟道2.0的1.75万亿,超大语言模型在 NLP 基准任务中不断刷新SOTA。
AI科技评论
2021/10/11
1.5K0
北大校友“炼丹”分享:OpenAI如何训练千亿级模型?
ImageNet准确率超过90%!谷歌大脑开源V-MoE,用稀疏条件计算来训练目前最大的视觉模型!(NeurIPS 2021)
稀疏的专家混合网络 (Sparsely-gated Mixture of Experts networks (MoEs)) 在自然语言处理中显示出出色的可扩展性。然而,在计算机视觉中,几乎所有SOTA网络都是 “密集的”,也就是说,对于每个输入,每个参数都要参与计算 。
CV君
2022/03/23
9210
ImageNet准确率超过90%!谷歌大脑开源V-MoE,用稀疏条件计算来训练目前最大的视觉模型!(NeurIPS 2021)
30年历史回顾,Jeff Dean:我们整理了一份「稀疏专家模型」研究综述
机器之心报道 机器之心编辑部 30年时间,稀疏专家模型已逐渐成为一种很有前途的解决方案。 稀疏专家模型是一个已有 30 年历史的概念,至今依然被广泛使用,是深度学习中的流行架构。此类架构包括混合专家系统(MoE)、Switch Transformer、路由网络、BASE 层等。稀疏专家模型已经在自然语言处理、计算机视觉和语音识别等多个领域展示出良好的性能。 近日,谷歌 AI 负责人 Jeff Dean 等人撰写了一篇稀疏专家模型的综述,回顾了稀疏专家模型的概念,提供了通用算法的基本描述,最后展望了未来的研究
机器之心
2022/10/08
4780
30年历史回顾,Jeff Dean:我们整理了一份「稀疏专家模型」研究综述
推荐阅读
手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)
1.6K0
【谷歌ICML】简单初始化,训练10000层CNN
6200
使用PyTorch实现混合专家(MoE)模型
1.5K0
稀疏性在机器学习中的发展趋势:MoE、稀疏注意力机制
6.3K0
一个神经网络学习一切!谷歌又放了个大卫星(附论文)
9130
微软研究院推出“Tutel”:一个促进大规模 DNN(深度神经网络)模型开发的高性能 MoE 库
1.4K0
零样本学习超越CLIP!谷歌提出首个多模态稀疏化模型LIMoE,还能降低计算成本
3060
大模型理论基础(so-large-lm)课程笔记!
3020
深度揭秘爆火MoE!GPT-4关键架构,成开源模型逆袭杀手锏
8370
无需额外训练,基于 Llama-2模型,通过 Model-GLUE 实现大规模语言模型的聚合与集成 !
1400
500亿参数,支持103种语言:谷歌推出「全球文字翻译」模型
6040
【Facebook AI && 含源码】有史以来第一个赢得WMT的多语言模型
6260
大模型系列之解读MoE
1.6K0
如何高效训练 Transformer?微软亚研院开源TorchScale工具包
5280
吸引机器学习圈眼球的MoE,会成为 NLP 与 CV 的未来吗?
1.1K0
谷歌新语言模型Switch Transformer
9840
Moirai-MoE: 稀疏混合专家赋能时间序列基础模型
2210
北大校友“炼丹”分享:OpenAI如何训练千亿级模型?
1.5K0
ImageNet准确率超过90%!谷歌大脑开源V-MoE,用稀疏条件计算来训练目前最大的视觉模型!(NeurIPS 2021)
9210
30年历史回顾,Jeff Dean:我们整理了一份「稀疏专家模型」研究综述
4780
相关推荐
手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验