2 使用Python训练和部署低精度模型 张校捷
低精度的概念和意义 TensorFlow的FP16模型 TensorRT的FP16/Int8模型 总结 1 低精度的概念和意义 实数的16-bit半精度浮点数和8-bit定点数表示 使用低精度的意义 深度学习模型中实数的表示 FP32: E8M23 FP16: E8M7 FP16: E5M10 Int8 (TPU, tf.bfloat16) (tf.float32) (GPU, tf.float16) 低精度浮点数的优点 1.节约内存/显存的使用(FP16为原来的1/2,int8为原来的1/4) 2.特殊的硬件专门用于低精度浮点数的计算加速(TensorCore) Model Speedup BERT Q&A 3.3X speedup GNMT 1.7X speedup NCF 2.6X speedup ResNet-50-v1.5 3.3X speedup FP16浮点数(E5M10)的表示范围 FP16模型的训练方法 Int8模型的推断过程 2 TensorFlow的FP16模型 实数的16-bit半精度浮点数和8-bit定点数表示 使用低精度的意义 TensorCores适用条件 1. 卷积:K(输入通道),C(输出通道) 2. 通用矩阵乘法(GEMM):MxK,KxN,(M,N,K) FP16: 大小为8x Int8: 大小为16x 如果FP32要使用,可以设置(内部转为FP16):0 码力 | 24 页 | 981.45 KB | 1 年前3Julia 中文文档
件表 示的数值类型,Julia 也能够高效地处理其数值运算。当然,这需要相对的牺牲一些性能。 以下是 Julia 的原始数值类型: • 整数类型: 类型 带符号? 比特数 最小值 最大值 Int8 ✓ 8 -2^7 2^7 - 1 UInt8 8 0 2^8 - 1 Int16 ✓ 16 -2^15 2^15 - 1 UInt16 16 0 2^16 - 1 Int32 ✓ 32 -2^31 (-2147483648, 2147483647) julia> for T in [Int8,Int16,Int32,Int64,Int128,UInt8,UInt16,UInt32,UInt64,UInt128] println("$(lpad(T,7)): [$(typemin(T)),$(typemax(T))]") end Int8: [-128,127] Int16: [-32768,32767] 下面的例子展示了不同的形式 julia> Int8(127) 127 julia> Int8(128) ERROR: InexactError: trunc(Int8, 128) Stacktrace: [...] julia> Int8(127.0) 127 julia> Int8(3.14) ERROR: InexactError: Int8(3.14) Stacktrace:0 码力 | 1238 页 | 4.59 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
这篇文章将介绍内置(或称为预声明的)基本类型和它们字面量的表示形式。 本篇文章不介绍组合类型。 基本内置类型 Go支持如下内置基本类型: 一种内置布尔类型:bool。 11种内置整数类型:int8、uint8、int16、uint16、int32、uint32、 int64、uint64、int、uint和uintptr。 两种内置浮点数类型:float32和float64。 两种内 位(以后简称位)。二进制位常称为比特(bit)。 比如,一个uint8的值将占 有8位。 我们称uint8类型的值的尺寸是8位。 因此,最大的uint8值是255 (28-1), 最大的int8值是127(27-1), 最小的int8值是-128(-27)。 任一个类型的所有值的尺寸都是相同的,所以一个值的尺寸也常称为它的类型 的尺寸。 更多的时候,我们使用字节(byte)做为值尺寸的度量单位。 一个字节相当于 能够表示的数值范围(溢出),则在编译时刻,此字面量不能用来表示此类型 的值。 下表是一些例子: 字面表示 此字面表示可以表示哪些类型的值(在编译时刻) 256 除了int8和uint8类型外的所有的基本数值类型。 255 除了int8类型外的所有的基本数值类型。 -123 除了无符号整数类型外的所有的基本数值类型。 123 所有的基本数值类型。 123.000 1.23e2 'a'0 码力 | 821 页 | 956.82 KB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
这篇文章将介绍内置(或称为预声明的)基本类型和它们字面量的表示形式。 本篇文章不介绍组合类型。 基本内置类型 Go支持如下内置基本类型: 一种内置布尔类型:bool。 11种内置整数类型: int8、 uint8、 int16、 uint16、 int32、 uint32、 int64、uint64、int、uint和uintptr。 两种内置浮点数类型:float32和float64。 位(以后简称位)。二进制位常称为比特(bit)。 比如,一个uint8的值将占 有8位。 我们称uint8类型的值的尺寸是8位。 因此,最大的uint8值是255(28- 1), 最大的int8值是127(27-1), 最小的int8值是-128(-27)。 任一个类型的所有值的尺寸都是相同的,所以一个值的尺寸也常称为它的类型 的尺寸。 更多的时候,我们使用字节(byte)做为值尺寸的度量单位。 一个字节相当于8 够表示的数值范围(溢出),则在编译时刻,此字面量不能用来表示此类型的 值。 下表是一些例子: 字面表示 此字面表示可以表示哪些类型的值(在编译时刻) 256 除了int8和uint8类型外的所有的基本数值类型。 255 除了int8类型外的所有的基本数值类型。 -123 除了无符号整数类型外的所有的基本数值类型。 123 所有的基本数值类型。 123.000 1.23e2 'a' 10 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
篇文章将介绍内置(或称为预声明的)基本类型和它们字面量的表示形式。 本篇文 章不介绍组合类型。 基本内置类型 Go支持如下内置基本类型: 一种内置布尔类型:bool。 11种内置整数类型:int8、uint8、int16、uint16、int32、uint32、 int64、uint64、int、uint和uintptr。 两种内置浮点数类型:float32和float64。 两种内 后简称位)。二进制位常称为比特(bit)。 比如,一个uint8的值将占有8位。 我们称uint8类型的值的尺寸是8位。 因此,最大的uint8值是255(28-1), 最 大的int8值是127(27-1), 最小的int8值是-128(-27)。 任一个类型的所有值的尺寸都是相同的,所以一个值的尺寸也常称为它的类型的尺 寸。 更多的时候,我们使用字节(byte)做为值尺寸的度量单位。 一个字节相当于8个 此字面表示可以表示哪些类型的值(在编译时刻) 第6章:基本类型和它们的字面量表示 32 字面表示 此字面表示可以表示哪些类型的值(在编译时刻) 256 除了int8和uint8类型外的所有的基本数值类型。 255 除了int8类型外的所有的基本数值类型。 -123 除了无符号整数类型外的所有的基本数值类型。 123 所有的基本数值类型。 123.000 1.23e2 'a'0 码力 | 591 页 | 21.40 MB | 1 年前3Nim 2.0.2 中文手册
-1 这样的数值字⾯值中的⼀元减号 - 是字⾯值的⼀部分,为了让 -128'i8 等表达式有效,后来被添加到语⾔中。如果没有这 种例外,则只有 -128 有效, -- 128 将不是有效的 int8 值。 unary_minus "⼀元减号"规则有⼀些限制,这在正式语法中没有提到。 - 是数值字⾯值的⼀部分时,前⾯的字符必须在 {' ', '\t', '\n', '\r', ',' int64 。为了记数⽅便,如 果类型后缀明确,那么后缀的撇号是可选的(只有带类型后缀的⼗六进制浮点数字⾯值的含义才会不明确)。 预定义的类型后缀有: 类型后缀 产⽣的字⾯值类型 'i8 int8 'i16 int16 'i32 int32 'i64 int64 'u uint 'u8 uint8 'u16 uint16 'u32 uint32 'u64 uint64 'f 范围内,就属于这种类型, 否则该字⾯量的类型是 int64 。 int XX 这种命名规则,是有符号整数类型附带 XX 表示位宽(例如: int16 是 16 位宽的整数)。 ⽬前⽀持 int8 int16 int32 int64 ,这些类型的字⾯值后缀为 'iXX 。 uint 常规的 unsigned integer "⽆符号整数"类型的⼤⼩与平台有关,与指针的⼤⼩相同,整数字⾯值后缀为0 码力 | 127 页 | 7.05 MB | 1 年前3Go基础语法宝典
数值类型 整数类型有无符号和带符号两种。Go同时支持 int 和 uint ,这两种类型的长度相同,但具体长度取决 于不同编译器的实现。Go里面也有直接定义好位数的类型: rune , int8 , int16 , int32 , int64 和 byte , uint8 , uint16 , uint32 , uint64 。其中 rune 是 int32 的别称, byte 是 uint8 需要注意的一点是,这些类型的变量之间不允许互相赋值或操作,不然会在编译时引起编译器报错。 如下的代码会产生错误:invalid operation: a + b (mismatched types int8 and int32) var a int8 var b int32 c:=a + b 另外,尽管int的长度是32 bit, 但int 与 int32并不可以互用。 浮点数的类型有 float32 和 float64 Go的 if 还有一个强大的地方就是条件判断语句里面允许声明一个变量,这个变量的作用域只能在该条 件逻辑块内,其他地方就不起作用了,如下所示 多个条件的时候如下所示: int 0 int8 0 int32 0 int64 0 uint 0x0 rune 0 //rune的实际类型是 int32 byte 0x0 // byte的实际类型是 uint80 码力 | 47 页 | 1020.34 KB | 1 年前32022年美团技术年货 合辑
中的重参数化层的数据分布。下图 2 以 “Rep_p4.block.0.rbr_reparam” 层为例,给出其特征图数值分布直方图,我们发 现其数值广泛分布在 [0, 57] 的区间内。显然,采用现有的 INT8 量化方法,无论怎样选 择量化缩放参数 (scale),都会产生较大的量化误差。 图 2 YOLOv6 网络使用 RepVGGBlock 和 RepOptBlock 版本的单层激活值数据分布 4%,在实际工程中基本不可用。而 YOLOv6s_repopt 网络的量化模型精度为 40.9%,精度损失仅为 1.5%,相比原版 模型有了极大的改善。 表 1 使用 RepOpt 在标准分类和检测任务上的 INT8 精度提升 2.1.3 RepOpt 版本的 QAT 此外,使用 RepOpt 结构解决了原本的 RepVGG 网络无法直接使用现有量化感知训 练的问题。对于结构重参数化的 RepVGG 网络,如何使用 特 征 图 进 行 通 道 蒸 馏 (channel-wise distillation, CW)。另外,我们采用“自蒸馏”的方法,教师模型是 FP32 精度的 YOLOv6s,学生模型是 INT8 精度的 YOLOv6s。下图 7 是一个简化 示意图,只画出了 Neck 的一个分支: 图 7 应用于 YOLOv6s 的通道蒸馏方案示意图 26 > 2022年美团技术年货 如下表 40 码力 | 1356 页 | 45.90 MB | 1 年前3Golang 入门笔记
(0 到 65535) uint32 无符号 32 位整型 (0 到 4294967295) uint64 无符号 64 位整型 (0 到 18446744073709551615) int8 有符号 8 位整型 (-128 到 127) int16 有符号 16 位整型 (-32768 到 32767) int32 有符号 32 位整型 (-2147483648 到 2147483647) 中数据乐行可以从表示范围小 --> 表示范围大,也可以 表示范围大 --> 表示范围小 2. 被转换的是变量存储的数据(即值),变量本省的数据类型并没有变化 3.在转换中,比如将 int64 转换为 int8, 编译的时候不会报错(需要考虑数据范围), 只是转换的结果是按照溢出处理,和我们希望的结果不一样。 测试案例 9. 基本数据类型和 string 的转换 介绍:开发过程中,我们经常需要将基本数据类型转换为0 码力 | 2 页 | 511.29 KB | 1 年前3阮一峰 《ECMAScript 6入门》 第三版
视图支持的数据类型一共有9种( DataView 视图支持除 Uint8C 以 外的其他8种)。 ArrayBuffer 633 数据类 型 字节长 度 含义 对应的C语言类 型 Int8 1 8位带符号整数 signed char Uint8 1 8位不带符号整数 unsigned char Uint8C 1 8位不带符号整数(自动过滤溢 出) unsigned char Int16 2 上面代码中,12除以4是没有余值的,而除以5会得到余值2。 请看下面的例子。 var int8 = new Int8Array(1); int8[0] = 128; int8[0] // -128 int8[0] = -129; int8[0] // 127 上面例子中, int8 是一个带符号的8位整数视图,它的最大值是127,最小值 是-128。输入值为 128 时,相当于正向溢出0 码力 | 679 页 | 2.66 MB | 1 年前3
共 49 条
- 1
- 2
- 3
- 4
- 5