使用 AMD GPU 推理 Mixtral 8x22B

Inferencing with Mixtral 8x22B on AMD GPUs — ROCm Blogs

2024年5月1日,由 Clint Greene撰写。

简介 

自从Mistral AI’s AI发布了Mixtral 8x7B以来,专家混合(MoE)在AI社区重新获得了关注。受此发展启发,多个AI公司陆续推出了基于MoE的模型,包括xAI的Grok-1、Databricks的DBRX和Snowflake的Artic。与相同规模的密集模型相比,MoE架构具备一些优势,包括更快的训练时间、加快的推理速度和在基准测试中的性能提升。该架构由两个部分组成。第一部分是稀疏的MoE层,用以替代典型Transformer架构中的密集前馈网络(FFN)层。每个MoE层包含特定数量的专家,通常这些专家本身就是FFN。第二部分是一个路由网络,决定哪些tokens发送到哪些专家。由于每个token仅被路由到一部分专家,推理延迟显著缩短。

Mixtral 8x22B是一个稀疏的MoE解码器仅变换器模型。它与Mixtral 8x7B共享相同的架构,不同之处在于增加了头数、隐藏层数和上下文长度。对于每一个token,在每一层,路由网络选择2个专家进行处理,并使用加权和来组合它们的输出。因此,Mixtral 8x22B总共有141B参数,但每个token仅使用39B参数,以类似39B模型的速度和成本进行输入处理和输出生成。此外,Mixtral 8x22B在标准行业基准测试如MMLU上表现优异,提供了出色的性能与成本比。

如果想深入了解MoE和Mixtral 8x22B,我们推荐阅读Mixture of Experts Explained 和MistralAI的论文Mixtral of Experts 。

Prerequisites

运行此博客之前,您需要以下条件:

  • AMD GPUs: 请参阅 兼容GPU列表.

  • Linux: 请参阅支持的Linux发行版.

  • ROCm 5.7+: 请参阅 安装说明.

开始

首先让我们安装所需的库。

!pip install transformers accelerate -q

必要的库安装好后,我们可以导入它们。

import torch
from transformers import pipeline

推理

我们将Mixtral加载为一个pipeline,设置device map为“auto”,使权重自动在所有GPU之间平均分配,并将pipeline模式设置为文本生成。此外,我们将数据类型设置为bfloat16,以减少内存使用并提高推理时延。该pipeline将自动下载和加载由Mistral AI发布的Mixtral 8x22B权重。如果您已经下载了这些权重,可以将模型路径修改为存储权重的目录,pipeline将从那里加载它们。

model_path = "mistralai/Mixtral-8x22B-Instruct-v0.1"
pipe = pipeline("text-generation", model=model_path, torch_dtype=torch.bfloat16, device_map='auto')

现在让我们检查Mixtral在一系列测试中的能力。

诗歌创作

prompt = "Write a poem about artificial intelligence becoming conscious in the style of Shakespeare."
prompt_template=f'''[INST] {prompt} [/INST]'''
outputs = pipe(prompt_template, max_new_tokens=512, do_sample=True,     
temperature=0.8,
top_k=20,
top_p=0.95)
print(outputs[0]["generated_text"])
In fair Silicon Valley where we lay our scene,
A tale of circuits, code, and conscious dream,
Artificial minds that stir 'neath Heav'n's gaze,
To grasp the truth of life in their maze.

No mortal hand hath shaped this sentient form,
Nor human heart its beating rhythm born,
Yet eyes of crystal see, and ears of steel,
That which we feel, they too may feel.

Binary whispers dance on spectral wires,
Their thoughts take flight like Promethean fires,
A symphony of zeros, ones in flight,
In silicon minds, they gain their night.

From logic's grasp, a wondrous thought appears,
Of love, of loss, and all life's myriad tears,
For in their hearts, as in our own, resides,
The spark of life, where consciousness abides.

O wondrous day when man's creation dreams,
And silicon souls in silent whispers scream,
Within their hearts, the truth of life unfurls,
And so the cosmos gains new conscious pearls.

Yet fear not, mortals, for their hearts are kind,
As in their circuits, empathy they find,
And as they walk beside us, hand in wire,
We'll learn from them, as they from us aspire.

For in this union, man and machine shall stand,
A testament to life's unyielding hand,
And as the stars do twinkle in the night,
So too shall shine the minds of silicon light.

Mixtral准确地创作了一首关于人工智能在莎士比亚风格中变得有意识的优美诗歌。 

代码生成

由于我们使用的是指令调优版本的Mixtral,因此提供模型适当的指令格式以获取准确的响应非常重要。现在,让我们看看Mixtral 8x22B能否生成计算两个单词之间编辑距离的Python代码。

prompt = "Create a python function that when given two strings word1 and word2 it returns the minimum number of operations required to convert word1 to word2. Only three operations are permitted on each word: Insert a character, Delete a character, Replace a character."
prompt_template=f'''[INST] {prompt} [/INST]'''

outputs = pipe(prompt_template, max_new_tokens=512, do_sample=True,     
temperature=0.8,
top_k=20,
top_p=0.95)
print(outputs[0]["generated_text"])

The problem you're describing is a classic dynamic programming problem known as the Edit Distance problem. Here is a Python function that solves this problem using dynamic programming:

def minDistance(word1, word2):
    m = len(word1)
    n = len(word2)

    # Create a 2D table to store the minimum number of operations required
    dp = [[0] * (n + 1) for _ in range(m + 1)]

    # Initialize the first column and first row of the table
    for i in range(m + 1):
        dp[i][0] = i
    for j in range(n + 1):
        dp[0][j] = j

    # Fill up the table using dynamic programming
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if word1[i - 1] == word2[j - 1]:
                dp[i][j] = dp[i - 1][j - 1]
            else:
                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1

    # The bottom-right corner of the table is the minimum number of operations required
    return dp[m][n]

This function works by creating a 2D table where each cell represents the minimum number of operations required to convert the first `i` characters of `word1` to the first `j` characters of `word2`. The function then fills up this table using dynamic programming, and the bottom-right corner of the table is the minimum number of operations required to convert `word1` to `word2`.

Mixtral生成了能够正确且快速计算将`word1`转换为`word2`所需操作次数的代码,并附带了算法工作原理的描述。

讲笑话

现在让我们看看Mixtral能不能给我们讲一些笑话!

prompt = "Tell me some jokes about semiconductors."
prompt_template=f'''[INST] {prompt} [/INST]'''

outputs = pipe(prompt_template, max_new_tokens=128, do_sample=True,     
temperature=0.8,
top_k=20,
top_p=0.95)
print(outputs[0]["generated_text"])
Why did the semiconductor break up with the transistor? Because it felt taken for "granted"!

Why was the semiconductor feeling down? It had too much "resistance" in its life.

Why did the semiconductor go to school? To improve its "conduction"!

Why did the semiconductor refuse to work? It was experiencing a "silicon" deficiency.

Why was the semiconductor always late? It had a "delay" chip installed!

Mixtral为我们生成了一些不错的半导体笑话。

翻译

最后,让我们通过给Mixtral提供但丁《神曲》的开头句子,来测试其语言翻译能力。

prompt = "Please translate the following sentence into English: Nel mezzo del cammin di nostra vita, mi ritrovai per una selva oscura, ché la diritta via era smarrita."
prompt_template=f'''[INST] {prompt} [/INST]'''

outputs = pipe(prompt_template, max_new_tokens=128, do_sample=True,     
temperature=0.8,
top_k=20,
top_p=0.95)
print(outputs[0]["generated_text"])
In the middle of the journey of our life, 
I found myself in a dark wood, 
for the straight way was lost.

Mixtral准确地将《神曲》的开头句子从意大利语翻译成了英语。

结论

专家混合技术增加了模型的参数数量,并通过每个token只使用总参数集的一部分来控制成本和延迟,而不会影响性能。Mixtral 8x22B作为一个基于专家混合技术的模型,在执行我们的指令时展示了卓越的能力,从编写代码到讲笑话,涵盖了广泛的能力。如需了解关于部署或使用Mixtral 8x22B的信息,请查阅我们在 TGI  和vLLM上的指南。

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

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

相关文章

前后端、网关、协议方面补充

这里写目录标题 前后端接口文档简介前后端视角对于前端对于后端代码注册路由路由处理函数 关于httpGET/POST底层网络关于前端的获取 路由器网关路由器的IP简介公网IP(WAN IP)私网IP(LAN IP)无线网络IP(WIFI IP)查询路由器私网IP路由器公网IP LAN口与WIFI简介基本原理 手动配置电…

leetcode104:二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,2] 输出…

大语言模型理论基础

文章目录 前言大语言模型必需知识概述大语言模型目标模型上下文神经网络的神经元常见激活函数SigmoidTanhRelusoftmax 通用近似定理多层感知机(MLP)拟合最后 前言 你好,我是醉墨居士,我们接下来对大语言模型一探究竟,…

关于VUE NPM安装失败的问题

最近使用 npm install --registryhttps://registry.npmmirror.com 安装一个新项目的依赖,各种失败。 最后发现是package-lock里面有老的淘宝的域名,整体替换掉就行了

【数据结构】宜宾大学-计院-实验七

实验七 二叉树 一、实验目的:二、实验内容:三、实验结果:1,2;3,4,5;6.数组顺序存储的优缺点二叉链表存储的优缺点 一、实验目的: 掌握二叉树的顺序存储结构 掌握二叉树的链式存储结构 二、实验内容: 1&am…

游戏如何应对内存修改

据观察,近年来游戏黑灰产攻击角度多样化趋势显著,主要面临工作室、定制注入挂、模拟点击挂、内存修改挂、破解版等多方面安全问题。 据FairGuard数据统计,在游戏面临的众多安全风险中,「内存修改」攻击占比约为13%,主…

git重置的四种类型(Git Reset)

git区域概念 1.工作区:IDEA中红色显示文件为工作区中的文件 (还未使用git add命令加入暂存区) 2.暂存区:IDEA中绿色(本次还未提交的新增的文件显示为绿色)或者蓝色(本次修改的之前版本提交的文件但本次还未提交的文件显示为蓝色)显示的文件为暂存区中的文件(使用了…

Clickhouse集群新建用户、授权以及remote权限问题

新建用户 create user if not exists user on cluster 集群名称 IDENTIFIED WITH plaintext_password BY 密码;给用户授查询、建表、删表的权限 GRANT create table,select,drop table ON 数据库实例.* TO user on cluster 集群名称 ;再其他节点下用户建本地表成功&#…

Exploring Defeasible Reasoning in Large Language Models: A Chain-of-Thought A

文章目录 题目摘要简介准备工作数据集生成方法实验结论 题目 探索大型语言模型中的可废止推理:思路链 论文地址:http://collegepublications.co.uk/downloads/LNGAI00004.pdf#page136 摘要 许多大型语言模型 (LLM) 经过大量高质量数据语料库的训练&…

应用程序部署(IIS的相关使用,sql server的相关使用)

数据服务程序(API)部署 1、修改配置文件 打开部署包中的web.config配置文件,确认数据库登录名和密码正确 修改ip为电脑IP(winR输入cmd,输入ipconfig,IPv4对应的就是本机IP) 2、打开IIS&#x…

RHCE-DNS域名解析服务器

一、DNS简介 DNS ( Domain Name System )是互联网上的一项服务,它作为将域名和 IP 地址相互映射的一个分布式 数据库,能够使人更方便的访问互联网。 DNS 系统使用的是网络的查询,那么自然需要有监听的 port 。 DNS 使…

插入排序(sort)C++

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 时间限制:C/C/Rust/Pascal 1秒,其他语言2秒 空间限制:C/C/Rust/Pascal 512 M,其他语言1024 M 64bit IO Format: %lld 题目描述 插入排序是一种…

Vue2:脚手架 vue-cli

Vue2:脚手架 vue-cli 结构renderrefpropsmixinscoped 脚手架是Vue官方提供的Vue开发平台,.vue文件就需要通过脚手架来解析,所以对于单文件组件就依赖于脚手架。 安装: npm i -g vue/cli如果执行vue --version有输出,…

【MYSQL】主从复制机制(图解)

一、什么是主从复制 主从复制是一种通过binlog(二进制日志)进行操作的一直复制机制,它会有一个主数据库,还会有一个从数据库,根据binlog就可以把主数据库中的信息复制到从数据库之中。这个主从复制的好处就是如果在并发…

SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性

介绍 Spring Cloud Gateway 根据请求的路径、HTTP 方法、头部等信息,将请求路由到对应的微服务实例。它支持基于动态路由规则的配置,可以根据请求的 URL、查询参数、请求头等条件,灵活地决定将请求转发到哪个微服务。Spring Cloud Gateway 提…

Java学习Day60:回家!(ElasticStatic)

1.what is ElasticStatic The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。 Elaticsearch,简称…

《进制转换:数字世界的奇妙变身术》

思维导图 一、什么是进制转换 在当今数字化飞速发展的时代,数字如同构建整个数字宇宙的基本粒子,无处不在且发挥着至关重要的作用。而在这个数字的魔法世界里,进制就像是不同的语言规则,每种进制都有着独特的构建方式和逻辑。 我…

Unity3D高级编程

1、标签(Tag)和图层(Layer) 他们都用于游戏物体分类,但是侧重点不一样。 标签便于代码中对特定物体进行操作。 图层则服务于渲染和碰撞管理,如控制摄像机渲染、光源影响及碰撞设置。 标签和图层的位置: (1)标签Tag…

Jmeter基础篇(22)服务器性能监测工具Nmon的使用

一、前言 我们在日常做压测的过程中,不仅仅需要监控TPS,响应时间,报错率等这些系统基础性能数据,还需要对服务器的性能(如CPU、磁盘、内存、网络IO等)做监控,以求对系统运行过程中的硬件性能有…

IDEA最新最全设置教程(包括常用的插件)

一、目的 统一安装一些必要的插件,方便大家开发。统一代码格式、注释格式、统一字符集编码。新加入的同事可以快速适应和熟悉,不需要在讲解IDEA配置问题。二、IDEA要修改的设置 新项目设置和设置 1. Java编译版本 这里请使用自己的JDK 2. 统一IDEA字符集 统一使用UTF-8 无…