首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

fp16 的累加误差有多大

编程知识
2024年09月22日 13:59

本文地址:https://wanger-sjtu.github.io/fp16-err/

最近在项目中需要实现fp16的数据类型做FFN的计算,算子实现的同学反馈误差与x86上得到的golden数据有比较大误差。开始以为是x86侧做数值模拟仿真的问题。后面也实现了对比了一下,发现误差累计确实挺大。

实测结果对比

int main()
{
    // Seed with a real random value, if available
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution<> dist(0, 0.01);
    
    float16_t lhs[4096] = {0};
    float16_t rhs[4096] = {0};
    for (int i = 0; i < 4096; i++) {
        lhs[i] =  dist(gen);
        rhs[i] =  dist(gen);
    }
    float16_t res_fp16 = 0;
    float res_fp32 = 0;

    for (int i = 0; i < 4096; i++) {
        res_fp16 += lhs[i] * rhs[i];
        res_fp32 += lhs[i] * rhs[i];
    }
    std::cout << "fp16 " << res_fp16 << std::endl;
    std::cout << "fp32 " << res_fp32 << std::endl;
    wirte2file("/data/local/tmp/lhs", reinterpret_cast<char*>(lhs), 8192);
    wirte2file("/data/local/tmp/rhs", reinterpret_cast<char*>(rhs), 8192);
}

结果输出:

fp16 0.0942383
fp32 0.103176

相对误差到8.1%了。难怪反馈有问题。

dim 绝对误差
100 1.63913e-07
1000 -0.00033829
2000 -0.000909835
4000 -0.00924221

golden 数据误差从何而来

实际生成golden数据的时候,也考虑了数值类型差异的影响,那为什么还存在误差呢?

对比了一下dot的视线与直接累加结果

import numpy as np
import torch

lhs = np.fromfile("lhs",dtype=np.float16)
rhs = np.fromfile("rhs",dtype=np.float16)

lhs = torch.from_numpy(lhs)
rhs = torch.from_numpy(rhs)

res = torch.Tensor([1]).half()
res[0] = 0
for i in range(4096):
    res += lhs[i:i+1] * rhs[i:i+1]

print(res)
print(torch.dot(lhs, rhs))
tensor([0.0942], dtype=torch.float16)
tensor(0.1041, dtype=torch.float16)

结果对得上了。torch 的 dot实现的时候很可能用了更高数值类型做累加。

From:https://www.cnblogs.com/wanger-sjtu/p/18425293
本文地址: http://shuzixingkong.net/article/2201
0评论
提交 加载更多评论
其他文章 我的网站集成ElasticSearch初体验
最近,我给我的网站(https://www.xiandanplay.com/)尝试集成了一下es来实现我的一个搜索功能,因为这个是我第一次了解运用elastic,所以如果有不对的地方,大家可以指出来,话不多说,先看看我的一个大致流程 这里我采用的sdk的版本是Elastic.Clients.Elas
我的网站集成ElasticSearch初体验 我的网站集成ElasticSearch初体验 我的网站集成ElasticSearch初体验
Nuxt Kit API :路径解析工具
title: Nuxt Kit API :路径解析工具 date: 2024/9/22 updated: 2024/9/22 author: cmdragon excerpt: 摘要:本文介绍了Nuxt Kit中用于解析路径的API工具,包括resolvePath、resolveAlias、find
Nuxt Kit API :路径解析工具 Nuxt Kit API :路径解析工具
初识算法
持续更新数据结构与算法专题,欢迎关注....... 1.1 什么是算法? 定义 在数学和计算机科学领域,算法是一系列有限的严谨指令,通常用于解决一类特定问题或执行计算 In mathematics and computer science, an algorithm (/ˈ&#230;lɡərɪ&#
初识算法 初识算法 初识算法
FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播
​之前的文章《利用RTMP协议构建电脑与手机的直播Demo》介绍了如何使用RTMP Streamer实现完整的RTMP直播流程,另一篇文章《利用SRT协议构建手机APP的直播Demo》介绍了如何使用SRT Streamer实现完整的SRT直播流程,接下来介绍如何使用EasyPusher-Androi
FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播 FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播
MySQL 用户、权限管理,C/C++连接与使用
目录用户用户管理查询所有用户查看当前用户查看当前连接数创建用户删除用户修改密码规则查看规则/策略规则说明临时设置持久设置修改密码权限数据库提供的 权限列表查看权限给用户授权回收用户权限使用C语言连接库的安装C APImysql_initmysql_real_connectmysql_closemys
MySQL 用户、权限管理,C/C++连接与使用
GIS转码的秋招历程与踩坑经历
本文介绍地理信息科学(GIS)专业的2024届应届生,在研三上学期期间,寻找后端研发、软件开发等IT方向工作的非科班转码秋招情况~
GIS转码的秋招历程与踩坑经历 GIS转码的秋招历程与踩坑经历
Filebeat
Filebeat 简介 Filebeat用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视指定的位置文件或位置,收集日志事件,并将他们转发到Elasticsearch 或Logstash进行索引。 架构图 安装Filebeat 下载并安装 wget https://
Filebeat Filebeat
"放开那代码让我来!"——Cursor帮你写代码的奇妙之旅
让我们开门见山:编程很酷,但也很折磨人。那些长时间盯着屏幕,debug无休止的日子,只有程序员懂得它的酸爽。而就在这个编程焦虑的世界中,Cursor横空出世,带着一系列魔法功能,如同你手中的一根智能魔杖,让写代码变得像煮速冻面一样简单。 Cursor,一款基于AI的编程助手,号称可以从自然语言生成代
"放开那代码让我来!"——Cursor帮你写代码的奇妙之旅 "放开那代码让我来!"——Cursor帮你写代码的奇妙之旅 "放开那代码让我来!"——Cursor帮你写代码的奇妙之旅