大模型 LLaMA-Omni 低延迟高质量语音交互,开源!

news2024/12/23 19:48:01

最近这一两周看到不少互联网公司都已经开始秋招发放Offer。

不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。

最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。

  • 《大模型面试宝典》(2024版) 正式发布!
  • 持续火爆!!!《AIGC 面试宝典》已圈粉无数!

喜欢本文记得收藏、关注、点赞。更多实战和面试交流,文末加入我们

技术交流

在这里插入图片描述

随着GPT-4o的发布,在语音界面的Voice-Chat越来越受到大家的关注,对于低延迟,高准确性模型的speech-to-speech的需求日益增长,来自中科院计算所NLP组的LLaMA-Omni 有效的解决了这样的需求,该模型整合了预训练的语音编码器、语音adapter、LLM和流式语音解码器,并消除了对文本输出后再语音转录的需求,能够直接从语音指令中同时生成文本和语音响应。

研究团队使用最新的Llama-3.1-8B-Instruct模型构建了Llama-3.1-8B-Omni,同时构建了一个名为“InstructS2S-200K”的数据集,其中包含20万个语音指令及其对应的语音响应。实验结果表明,相比于之前的语音语言模型,LLaMA-Omni在内容和风格上提供了更好的响应,并且具有极低的响应延迟,仅为226毫秒。此外,训练LLaMA-Omni仅需要不到3天的时间,在只有4个GPU的情况下进行,为未来高效开发语音语言模型铺平了道路。

图片

小编敲黑板,LLaMA-Omni 主要特点和进步:

高质量问答

基于LLaMA-3.1-8B训练,LLaMA-3.1-8B是同尺寸大小的比较领先的大语言模型,来确保回应质量高

同时语音和文本响应

LLaMA-Omni 能够根据用户语音输入生成语音和文本响应(如下图)。这使其成为语音助手或交互式代理等实时应用的理想选择。响应是同时生成的,无需繁琐的中间转录步骤,从而提高了对话的速度和流畅度。

图片

低延迟

LLaMA-Omni 最令人印象深刻的功能是低延迟,其响应时间低至226 毫秒。这使其成为目前最快的语音对语音交互模型之一,可确保用户体验近乎即时的反馈。和传统的方式不同之处在于输出的时候不是先输出完文本再把文本转换成语音,而是流式的边输出文本边输出语音,类似人的同声传译,大幅度降低了延迟。

高效训练

LLaMA-Omni 不仅延迟低,开发效率也高,训练LLaMA-Omni仅需要不到3天的时间,在只有4个GPU的情况下进行,为未来高效开发语音语言模型铺平了道路,凸显了其对各类 AI 开发者和研究人员的可扩展性和可访问性。

优化数据集

构建了一个名为“InstructS2S-200K”的数据集,其中包含20万个语音指令及其对应的语音响应。此数据集确保模型高度适应处理各种语音输入并生成适当的上下文感知响应。

模型地址:

https://modelscope.cn/models/ICTNLP/Llama-3.1-8B-Omni

论文地址:

https://arxiv.org/abs/2409.06666

代码地址:

https://github.com/ictnlp/LLaMA-Omni

模型使用

下载代码repo

git clone https://github.com/ictnlp/LLaMA-Omni
cd LLaMA-Omni

安装Omni包

pip install pip==24.0
pip install -e .

安装fairseq

git clone https://github.com/pytorch/fairseq
cd fairseq
pip install -e . --no-build-isolation

安装flash-attention

pip install flash-attn --no-build-isolation

模型下载

下载Llama-3.1-8B-Omni

modelscope download --model=ICTNLP/Llama-3.1-8B-Omni --local_dir ./Llama-3.1-8B-Omni

下载whisper-large-v3

wget "https://modelscope.cn/models/ai-modelscope/large-v3.pt/resolve/master/large-v3.pt" -P models/speech_encoder/

下载HiFi-GAN vocoder.

wget https://dl.fbaipublicfiles.com/fairseq/speech_to_speech/vocoder/code_hifigan/mhubert_vp_en_es_fr_it3_400k_layer11_km1000_lj/g_00500000 -P vocoder/
wget https://dl.fbaipublicfiles.com/fairseq/speech_to_speech/vocoder/code_hifigan/mhubert_vp_en_es_fr_it3_400k_layer11_km1000_lj/config.json -P vocoder/

模型推理

要进行本地推理,请按照 omni_speech/infer/examples 目录中的格式组织语音指令文件,然后参考以下脚本。

bash omni_speech/infer/run.sh omni_speech/infer/examples

模型微调

我们使用ms-swift对Llama3.1-8B-Omni进行微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型微调部署框架。

ms-swift开源地址:

https://github.com/modelscope/ms-swift

这里展示可运行的demo,自定义数据集可以查看这里:https://swift.readthedocs.io/zh-cn/latest/Instruction/%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%8E%E6%8B%93%E5%B1%95.html

在开始微调之前,请确保您的环境已准备妥当。

git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .[llm]

我们使用 aishell1-zh-mini 数据集:https://modelscope.cn/datasets/speech_asr/speech_asr_aishell1_trainsets 进行微调。

微调脚本:

# 默认:微调LLM和projector, 冻结vision encoder和generator
CUDA_VISIBLE_DEVICES=0 swift sft \
  --model_type llama3_1-8b-omni \
  --model_id_or_path ICTNLP/Llama-3.1-8B-Omni \
  --sft_type lora \
  --dataset aishell1-zh-mini#5000

# Deepspeed ZeRO2
NPROC_PER_NODE=4 \
CUDA_VISIBLE_DEVICES=0,1,2,3 swift sft \
  --model_type llama3_1-8b-omni \
  --model_id_or_path ICTNLP/Llama-3.1-8B-Omni \
  --sft_type lora \
  --dataset aishell1-zh-mini#5000 \
  --deepspeed default-zero2

训练显存占用:

图片

如果要使用自定义数据集,只需按以下方式进行指定:

# val_dataset可选,如果不指定,则会从dataset中切出一部分数据集作为验证集
    --dataset train.jsonl \
    --val_dataset val.jsonl \

自定义数据集格式如下,分别代表单音频、多音频和纯文本的格式:

{"query": "<audio>55555", "response": "66666", "audios": ["audio_path"]}
{"query": "<audio><audio>eeeee", "response": "fffff", "history": [], "audios": ["audio_path1", "audio_path2"]}
{"query": "query3", "response": "response3", "history": [["query1", "response1"], ["query2", "response2"]]}

训练loss图:

图片

微调后推理脚本如下,这里的ckpt_dir需要修改为训练生成的last_checkpoint文件夹。

CUDA_VISIBLE_DEVICES=0 swift infer \
    --ckpt_dir output/llama3_1-8b-omni/vx-xxx/checkpoint-xxx \
    --load_dataset_config true

# or merge-lora & infer
CUDA_VISIBLE_DEVICES=0 swift infer \
    --ckpt_dir output/llama3_1-8b-omni/vx-xxx/checkpoint-xxx \
    --load_dataset_config true --merge_lora true

微调后模型对验证集进行推理的结果:

图片

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python-patterns:Python 设计模式大全

python-patterns 是一个开源的 Python 项目&#xff0c;它提供了各种经典的设计模式的 Python 实现。设计模式是一种针对常见软件设计问题的可复用解决方案&#xff0c;通过使用设计模式&#xff0c;开发者可以编写出结构更加合理、易于维护和扩展的代码。 Python 是一门动态语…

GraphEval: A Knowledge-Graph Based LLM Hallucination Evaluation Framework

文章目录 题目摘要引言问题陈述相关工作GraphEval:我们的评估方法使用LLM构建知识GraphCorrect:使用GraphEval纠正幻觉实验讨论结论 题目 GraphEval:一个基于知识图的LLM幻觉评估框架 论文地址&#xff1a;https://arxiv.org/abs/2407.10793 摘要 评估大型语言模型(LLM)响应和…

【计算机科研方法指南】- 读书笔记《学术咸鱼自救指南》+于老师科研课

前言简介 因为自己在做计算机科研的时候&#xff0c;一开始很不顺利&#xff0c;所以专门去研究了一些具体的计算机科研方法。这里的方法主要参考了两个资料&#xff0c;一个是《学术“咸鱼”自救指南》&#xff0c;一个是于静老师科研课。 《学术“咸鱼”自救指南》是作者钱…

【微服务】组件、基础工程构建(day2)

组件 服务注册和发现 微服务模块中&#xff0c;一般是以集群的方式进行部署的&#xff0c;如果我们调用的时候以硬编码的方式&#xff0c;那么当服务出现问题、服务扩缩容等就需要对代码进行修改&#xff0c;这是非常不好的。所以微服务模块中就出现了服务注册和发现组件&…

视频创作黑科技!CogVideoX秒生成艺术视频

视频创作黑科技&#xff01;CogVideoX秒生成艺术视频 CogVideoX上线啦&#xff01;&#x1f389; 它能把文字和图片变成惊艳视频&#x1f3a5;。CogVideoX-5B如同好莱坞导演&#xff0c;快速生成高质量内容⚡&#xff0c;完美捕捉创意细节✨。让你轻松成为视频创作大师&#x…

Linux命令--03----帮助类命令、开关机类命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.帮助类命令man获取帮助信息help获得shell内置命令的帮助信息 2.开关机类命令2.1 开关机命令一般Linux不会经常进行关机操作,正确的关机流程为: sync>shutdown&…

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性&#xff0c;有一道比较经典的题&#xff1a;如何使用UDP实现可靠传输&#xff0c;通过应用程序的代码&#xff0c;完成可靠传输的过程&#xff1f; 原则&#xff0c;TCO有啥就吹啥&#xff0c;引入滑动窗口&#xff0c;引入流量控制&#x…

电子连接器温升仿真教程 二

在《电子连接器温升仿真教程 一》中详细介绍了用内热法做电子连接器温升仿真的操作步骤与方法,本教程将讲解用电流电压法做电子连接器温升仿真。 本教程,将以下面产品为例演示温升仿真方法其操作步骤。 该连接器为电池连接器,其Housing材料为LCP+30%GF,端子材质为铍铜…

IDEA中配置启动类的Active Profiles

如现在有以下三个配置文件 application.yaml application-dev.yaml application-local.yaml 当我在本机启动时&#xff0c;想使用application-local.yaml&#xff0c;而不是application-dev.yaml&#xff0c;那么可以这样配置&#xff1a;&#xff08;我这是添加启动类一起的&a…

基于深度学习的乳腺癌分类识别与诊断系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 乳腺癌是全球最常见的癌症之一&#xff0c;早期诊断对于治疗效果至关重要。近年来&#xff0c;深度学习技术在医学图像分析领域取得了显著进展&#xff0c;能够从大量的医学影像数据中自动学习和提…

10.2学习

1.IOC控制反转 IoC&#xff08;Inverse of Control:控制反转&#xff09;是⼀种设计思想&#xff0c;就是将原本在程序中⼿动创建对象的控制权&#xff0c;交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤&#xff0c;并⾮ Spring 特有。 ​ IoC 容器是 Spring⽤来实现 IoC …

IDEA 设置自动定位文件

一、场景分析 IDEA 在使用的过程中&#xff0c;发现有时候&#xff0c;打开一个类&#xff0c;它并不能自动帮我们在左侧 Project 树中定位出文件&#xff0c;需要自己手动点击 瞄准 图标。很不方便。 二、解决方法 1、点击 瞄准 图标旁边的 竖三点 2、将 Alwasy Select Opene…

[Linux][进程] 命令行参数

在我们学c 语言时经常会看到各种各样的代码&#xff0c;其中mian函数的参数有许多种&#xff0c;如&#xff1a; int main(){} int main(void){} int main(int argc,char* argv[]){} int main(int argc,char* argv[] , char* env[]){} int argc,char* argv[] 这两个就是命令行参…

10月2日笔记(内网资源探测篇)

内网资源探测 在内网渗透中&#xff0c;测试人员往往需要通过各种内网扫描技术来探测内网资源的情况&#xff0c;为后续的横向渗透做准备&#xff0c;通常需要发现内网存活的主机&#xff0c;并探测主机的操作系统、主机开放了哪些端口、端口上运行了哪些服务、服务的当前版本…

典型模拟滤波器

典型模拟滤波器的幅度函数描述了滤波器在不同频率下的幅度响应特性。 巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09; 幅度平方函数&#xff1a; ∣ H ( j Ω ) ∣ 2 1 1 ( Ω Ω c ) 2 N |H(j\Omega)|^2 \frac{1}{1 \left(\frac{\Omega}{\Omega_c}\right)^{…

【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找&#xff0c;每次找到可到达的最远位置&#xff0c;就可以在线性时间内得到最少的跳跃次数。 例如&#xff0c;对于数组 [2,3,1,2,4,2,3]&#xff0c;初始位置是下标 0&#xff0c;从下标 0 出发&#xff0c;最远可到达下标 2。下标 0 可到达的…

Python(三)——列表

文章目录 创建列表访问下标遍历列表元素新增元素查找元素删除元素连接列表切片操作 创建列表 创建列表主要有两种方式 [ ]表示一个空的列表 a [] print(type(a)) # <class list> print(a) # []通过list()的方式来创建一个空列表 a list() print(type(a)) # …

Java中的switch分支结构

switch分支结构 switch分支结构1.基本语法2.说明3.流程图4.案例5.注意事项6.练习7.switch和if的比较 switch分支结构 1.基本语法 switch&#xff08;表达式&#xff09;{case 常量1: //当...语句块1;break;case 常量2: 语句块2;break;...case 常量n: 语句块n;break;defaul…

python之认识变量

1、变量 1.1、定义 字面意思来看&#xff0c;会发生改变的量称为变量。 相反的&#xff0c;如果有一个不会发生改变的量&#xff0c;它应该称为不变量&#xff0c;即常量。 1.2、引入变量的原因 主要是为了方便程序员动态的管理、操控数据。 1.3、变量的三要素 名称 类型…

20_Python的包和模块

包和模块 在Python中&#xff0c;包和模块是用来组织代码的一种方式。它们可以帮助开发者管理代码结构&#xff0c;使得代码更易于维护和复用。 内置的包和模块第三方包和模块自定义包和模块 模块(Module) 模块是包含Python定义和语句的文件。一个模块就是一个单独的Python…