解决 RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Half‘

解决 RuntimeError: “LayerNormKernelImpl” not implemented for ‘Half’。

在这里插入图片描述

错误类似如下:

Traceback (most recent call last):
File “cli_demo.py”, line 21, in
for results in webglm.stream_query(question):
File “/root/WebGLM/model/modeling_webglm.py”, line 49, in stream_query
outputs = self.model.generate(**inputs, max_length=1024, eos_token_id = self.tokenizer.eop_token_id, pad_token_id=self.tokenizer.eop_token_id)
File “/usr/local/python3/lib/python3.8/site-packages/torch/autograd/grad_mode.py”, line 27, in decorate_context
return func(*args, **kwargs)
File “/usr/local/python3/lib/python3.8/site-packages/transformers/generation/utils.py”, line 1515, in generate
return self.greedy_search(
File “/usr/local/python3/lib/python3.8/site-packages/transformers/generation/utils.py”, line 2332, in greedy_search
outputs = self(
File “/usr/local/python3/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1130, in _call_impl
return forward_call(*input, **kwargs)
File “/root/.cache/huggingface/modules/transformers_modules/WebGLM-2B/modeling_glm.py”, line 902, in forward
model_output = self.glm(input_ids, position_ids, attention_mask, mems=mems, **kwargs)
File “/usr/local/python3/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1130, in _call_impl
return forward_call(*input, **kwargs)
File “/root/.cache/huggingface/modules/transformers_modules/WebGLM-2B/modeling_glm.py”, line 783, in forward
transformer_output = self.transformer(embeddings, position_ids, attention_mask, mems)
File “/usr/local/python3/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1130, in _call_impl
return forward_call(*input, **kwargs)
File “/root/.cache/huggingface/modules/transformers_modules/WebGLM-2B/modeling_glm.py”, line 595, in forward
hidden_states = layer(*args, mem=mem_i)
File “/usr/local/python3/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1130, in _call_impl
return forward_call(*input, **kwargs)
File “/root/.cache/huggingface/modules/transformers_modules/WebGLM-2B/modeling_glm.py”, line 417, in forward
layernorm_output = self.input_layernorm(hidden_states)
File “/usr/local/python3/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1130, in _call_impl
return forward_call(*input, **kwargs)
File “/usr/local/python3/lib/python3.8/site-packages/torch/nn/modules/normalization.py”, line 189, in forward
return F.layer_norm(
File “/usr/local/python3/lib/python3.8/site-packages/torch/nn/functional.py”, line 2503, in layer_norm
return torch.layer_norm(input, normalized_shape, weight, bias, eps, torch.backends.cudnn.enabled)
RuntimeError: “LayerNormKernelImpl” not implemented for ‘Half’


在深度学习中,Layer Normalization(层标准化)是一种常用的技术,用于加速训练和提高模型稳定性。然而,在某些情况下,您可能会遇到RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Half‘错误。这个错误通常意味着在半精度(即float16)模式下,Layer Normalization的实现存在问题。
问题原因:

硬件和软件不兼容:某些深度学习框架(如PyTorch)在某些硬件上可能不支持半精度Layer Normalization。
模型和层配置问题:在模型定义或配置中,可能存在与半精度不兼容的设置。
版本问题:使用的深度学习框架或库的版本可能存在已知的bug或不兼容性。
解决方案:
检查硬件和软件支持:确保您的硬件和软件支持半精度运算。某些GPU可能不完全支持半精度运算,此时可以考虑使用其他GPU或升级驱动程序和框架版本。
使用全精度运算:作为一种临时解决方案,您可以尝试将模型和训练切换到全精度(即float32)模式。这可以通过修改模型配置或设置训练参数来实现。
更新框架和库:检查是否有可用的更新,并确保您使用的是最新版本的深度学习框架和相关库。新版本可能修复了与半精度运算相关的问题。
自定义实现:如果框架本身不支持半精度Layer Normalization,您可以考虑自己实现该层。这需要一定的深度学习和编程知识,但可以提供更大的灵活性和控制力。
查找相关社区和论坛:参与相关的开发者社区和论坛,查找类似问题的解决方案和讨论。这些社区通常由经验丰富的开发者组成,可以提供宝贵的建议和解决方案。
预防措施:
文档阅读:在开始项目之前,仔细阅读您所使用的深度学习框架的文档。了解半精度运算的支持情况和最佳实践。
测试不同设置:在进行模型训练之前,尝试在不同的设置(如不同的硬件、软件版本等)下进行测试,以识别潜在的问题区域。
持续关注更新:保持对深度学习框架和相关库的关注,以便及时了解任何与半精度运算相关的改进和新特性。
代码审查:定期进行代码审查,确保代码中没有与半精度运算不兼容的配置或设置。
备份和记录:在进行任何更改之前,始终备份您的项目代码和配置。这样,如果出现问题,您可以轻松回滚到之前的状态并进行调试。

解决方法:

export COMMANDLINE_ARGS="--use-cpu all --precision full --no-half --skip-torch-cuda-test"
export COMMANDLINE_ARGS="--skip-torch-cuda-test --precision full --no-half"
export COMMANDLINE_ARGS="--skip-torch-cuda-test --no-half --use-cpu all"
export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu interrogate --precision full --no-half"
export COMMANDLINE_ARGS="--autolaunch --skip-torch-cuda-test --disable-nan-check --no-half --use-cpu all"

-–skip-torch-cuda-test:这个参数是用来跳过检测 torch 是否能使用 GPU 的,如果您的 CUDA 和 torch 版本不匹配,或者您的电脑没有 CUDA GPU ,可以使用这个参数来绕过这个检测。

-–precision full:这个参数是用来指定 torch使用全精度(32位)的浮点数来运算的,相比于半精度(16位)或混合精度(16位和32位),全精度可以提高运算的准确性,但也会增加运算的时间和内存消耗。

-–no-half:这个参数是用来禁止 torch 使用半精度的数据类型的,如果您的显卡不支持半精度,或者您遇到了 “LayerNormKernelImpl” not implemented for ‘Half’ 的错误,可以使用这个参数来解决。


如果还是不行,可以考虑修改代码解决:

这个错误通常发生在尝试以半精度(Half)模式运行包含层归一化(Layer Norm)操作的代码时。具体来说,该错误表示图形处理器(GPU)上不支持半精度数据的层归一化操作。

要解决这个问题,可以尝试以下方法:

  1. 确保你使用的是最新版本的 PyTorch。更新到最新版本可能会修复此问题。你可以使用以下命令检查和更新 PyTorch:

    pip install --upgrade torch
    
  2. 在运行层归一化操作之前,将数据类型转换为全精度(Float)模式:

    # 将输入数据转换为全精度(Float)类型
    inputs = inputs.float()
    
    # 执行模型操作
    outputs = self.model.generate(**inputs, max_length=1024, eos_token_id=self.tokenizer.eop_token_id, pad_token_id=self.tokenizer.eop_token_id)
    
    # 如果需要,将数据类型转回半精度(Half)
    inputs = inputs.half()
    
  3. 如果你的系统支持,可以尝试禁用 GPU 加速,将代码切换到 CPU 运行:

    # 在初始化模型之前禁用 GPU 加速
    torch.backends.cudnn.enabled = False
    
    # 初始化模型和其他相关操作
    # ...
    
    # 执行模型操作
    # ...
    

例如:

Benchmark模式会提升计算速度,但是由于计算中有随机性,每次网络前馈结果略有差异。如果想要避免这种结果波动,设置:

torch.backends.cudnn.deterministic = True

设置为True,说明设置为使用使用非确定性算法:

torch.backends.cudnn.enabled = True

整体使用:
在模型的开始之前添加:

import torch.backends.cudnn as cudnn
cudnn.deterministic = True
cudnn.benchmark = True
cudnn.enabled = True

CPU运行的报错似乎与pytorch有关,CPU推理目前仍只支持fp32。
最后如果代码里面 模型 初始化的时候,调用了半精度,例如:

self.model = self.model.half()

修改为:

if device != "cpu":
    self.model = self.model.half()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTP-API开发系列之三:柜台系统简介

CTP-API开发系列之三:柜台系统简介 CTP-API开发系列之三:柜台系统简介中国金融市场结构---交易所柜台系统通用柜台系统极速柜台系统主席与次席 CTP柜台系统CTP组件名称对照表CTP柜台系统程序包CTP柜台系统架构图 CTP-API开发系列之三:柜台系统…

基于Yolo5模型的动态口罩佩戴识别安卓Android程序设计

禁止完全抄袭,引用注明出处。 下载地址 前排提醒:文件还没过CSDN审核,GitHub也没上传完毕,目前只有模型的.pt文件可以下载。我会尽快更新。 所使用.ptl文件 基于Yolo5的动态口罩佩戴识别模型的pt文件资源-CSDN文库 项目完整文…

信息抽取技术:电商领域的智能化革命与市场策略优化

一、引言 在当今快速发展的互联网电商领域,信息抽取技术的应用已经成为商家优化供应链、降低成本、提高响应速度的关键手段。随着消费者需求的日益多样化和个性化,电子商务平台需要更高效、智能的数据处理能力来应对市场的挑战。从供应商管理到库存优化…

蓝桥杯(3.7)

P1102 A-B 数对 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int c sc.nextInt();int[] res new int[n1];for(int i1;i<n;i)res[i] sc.nextInt();int sum 0;for(i…

看一看阿里云,如何把抽象云概念,用可视化表达出来。

云数据库RDS_关系型数据库 云数据库RDS_关系型数据库 专有宿主机 云数据库RDS_关系型数据库_MySQL源码优化版 内容协作平台CCP-企业网盘协同办公-文件实时共享

python基础——入门必备知识

&#x1f4dd;前言&#xff1a; 本文为专栏python入门基础的第一篇&#xff0c;主要带大家先初步学习一下python中的一些基本知识&#xff0c;认识&#xff0c;了解一下python中的一些专有名词&#xff0c;为日后的学习打下良好的基础,。本文主要讲解以下的python中的基本语法&…

【nodejs】“__dirname is not defined”错误修复

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 原理CommonJS vs ESM错误原因 2️⃣ 禁用 ESM 模式并改用 CommonJS方案一&#xff1a;项目方案二&#xff1a;单文件 3️⃣ 在 ESM 模式下自实现__dirname&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 从网上找了一份代码&am…

opengl 学习(一)-----创建窗口

创建窗口 分类opengl 学习(一)-----创建窗口效果解析教程补充 分类 c opengl opengl 学习(一)-----创建窗口 demo: #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>using names…

智能控制:物联网智能插座对接文档

介绍 一开始买的某米的插座&#xff0c;但是好像接口不开放&#xff0c;所以找到了这个插座&#xff0c;然后自己开发了下&#xff0c;用接口控制插座开关。wifi的连接方式&#xff0c;通电后一般几秒后就会连接上wifi&#xff0c;这个时候通过接口发送命令给他。 产品图片 通…

第十篇:复习maven

文章目录 一、什么是Maven1. 依赖管理2. 统一项目结构3. 项目构建4. 依赖的仓库 二、IDEA集成Maven1. Maven简单的安装和配置2. 配置Maven环境3. 创建Maven项目4. Maven坐标4. 导入Maven项目 三、依赖管理1. 依赖配置2. 依赖传递3. 依赖范围4. 生命周期 四、小结 一、什么是Mav…

SAP MM学习笔记 - 错误 BMG140 - The material number is longer than the length set

错误 BMG140 - The material number is longer than the length set 品目编号大于长度设置 1&#xff0c;在新规品目的时候&#xff0c;出的错 2&#xff0c;OMSL 品目Code书式变更 IMG path>Logistic general>Material Master>Basic settings>Define output for…

【Web前端入门学习】—CSS

目录 CSS简介CSS语法CSS三种导入方式CSS选择器元素选择器&#xff08;标签选择器&#xff09;类选择器ID选择器通用选择器子元素选择器后代选择器&#xff08;包含选择器&#xff09;并集选择器&#xff08;兄弟选择器&#xff09;伪类选择器伪元素选择器 CSS常用属性盒子模型网…

TabLayout预览不了?

<TableLayoutandroid:layout_width"wrap_content"android:layout_height"wrap_content"/> 当然预览不了了&#xff0c;这其实不是我要的控件。 而实际需要的是TabLayout 不是TableLayout &#xff01;&#xff01;&#xff01; <com.google.an…

机器学习——感知机模型

机器学习系列文章 入门必读&#xff1a;机器学习介绍 文章目录 机器学习系列文章前言1. 感知机1.1 感知机定义1.2 感知机学习策略 2. 代码实现2.1 构建数据2.2 编写函数2.3 迭代 3. 总结 前言 大家好&#xff0c;大家好✨&#xff0c;这里是bio&#x1f996;。这次为大家带来…

lvs+keepalive

虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP) VRRP能够在不改变组网的情况下&#xff0c;将多台路由器虚拟成一个虚拟路由器&#xff0c;通过配置虚拟路由器的IP地址为默认网关&#xff0c;实现网关的备份。 协议版本: VRRPv2&#xff08;常用&…

日常生活小技巧 -- USR-TCP232-M4(读取IP)

下载&#xff1a;[Configuration Software]USR-TCP232-M4_V2.3.4.106

Vue2+3

vue相关介绍 Vue的两种使用方式&#xff1a; 1、vue核心包开发 场景&#xff1a;局部模块改造 2、vue核心包&vue插件工程化开发 场景&#xff1a;整站开发 概念&#xff1a;vue是用于构建用户界面的渐进式框架 创建vue实例 创建Vue实例&#xff0c;初始化渲染步骤&am…

Unity类银河恶魔城学习记录8-4 P80 Blackhole ability state源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic…

Windows系统获取硬盘读写速度(固态、机械通用)

管理员身份运行cmd&#xff0c;注意不要用powershell&#xff0c;可能会闪退 运行命令 winsat disk -drive C 获得C盘的读写速度 同理 winsat disk -drive D 可获得D盘的读写性能

【产品文档分类及撰写路径】

一、产品文档的分类 产品文档根据所处阶段和面相对象的差异大致可以分为三类&#xff1a; 商业需求文档 (BRD)&#xff1a;商业需求文档是面向公司高层和项目组&#xff0c;目的是为了获得资金、资源支持。市场需求文档 (MRD)&#xff1a;市场需求文档是面向运营和市场销售人员…