Intel Arc Alchemist架构(A770A750)运行Qwen 3.5并支持多模态之二

2026-04-11 14:471阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

继续上周的开源推广项目的记录,本篇不涉及推广内容,基本算是技术路线描述、性能统计和一点碎碎念,因此需要获取原项目的直接移步下面帖子里的Github链接即可

项目起始:
https://linux.do/t/topic/1829505

开源地址

Intel Arc Alchemist架构(A770 / A750)运行Qwen 3.5并支持多模态 开发调优
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 继续昨天的…

周末主要做的工作就是写基于Pytorch 的 XPU 自定义算子。

只支持 XPU,限定了 query/key/value/z 同 dtype,支持 float16、bfloat16、float32。但内部把 beta、g、norm_weight 和递推状态统一提升到 float32 来算,状态张量 working_state 也统一 float32,这是为了数值稳定做出的妥协,降级的话总是遇到乱码问题。

对每个 head 的输出做 RMSNorm,再乘 norm_weight,最后乘 silu(z) 门控。

Qwen3GatedDeltaNet.forward 先做投影和 depthwise conv,得到 query/key/value/z/beta/g,再把它们一次性交给 fused op。beta = sigmoid(b),g = -exp(A_log) * softplus(a + dt_bias),所以 exp(g) 实际上是衰减因子;解码时如果是单 token,会把上一步缓存的 recurrent state 作为 initial_state 传进去,并把新的 final_state 存回 cache。

你可以在下面这个截图里面看到cache生效的标志。

image1040×755 43.9 KB


这个自定义算子实现的是:

Qwen3 线性注意力里 Gated DeltaNet 的 XPU 融合核,把“递推状态更新 + 当前输出计算 + RMSNorm + z-gate”压成了一个 SYCL kernel,主要价值是减少中间张量和调度开销,针对 Intel Arc 上的推理和单步解码进行的特定优化。


对于各种量化格式

现在只测试了BF16、FP8、AWQ-4bit,其它量化格式还没测试


性能表现

Qwen3___5-9B-Claude-4___6-Opus-Reasoning-Distilled-v2(BF16)

平均输出速度稳定在 12 tokens/s

首字TTFT下降到了2000ms(相比上周的16000ms快了数倍

VRAM usage: 9.7 GB

System RAM usage: 17 GB

网友解答:
--【壹】--:

看又看不懂。只能给你点个赞了。


--【贰】--:

也是物尽其用了


--【叁】--:

这卡跟你这辈子值了


--【肆】--:

佬的技术太强了,好奇这种手写算子和llamacpp vulkan后端相比起来有什么优势吗,感觉后者会不会比较通用。


--【伍】--:

你看得懂,只是你比较谦虚


--【陆】--:

直接用llamacpp + vulkan的话性能上我还没有试过呢,主要是我之前不想在Win端装llamacpp

不过这个项目主要还是明显更偏“针对 Intel Arc Alchemist架构在Qwen 3.5 的垂直优化”,针对Qwen的线性注意力和Xe核心调用,特别是XPU int4,主要面向当前 XPU 路径;

llama.cpp 官方量化档位更全,从 1.5-bit 到 8-bit,也支持 CPU+GPU hybrid inference,技术支持这块确实比不了

做这个项目一方面是想多了解下架构信息,解决旧版Xe一代运行前沿模型的适配缺失问题;

另一方面也是闲着没事干(


手写的算子可以调整的地方很多,你可以根据CPU性能、RAM频率来调整cpu offload的具体参数,由于上周是先测试的Qwen3.5-35B-A3B的MoE,所以项目里对应的文件被命名为gate control了,但实际是通用的

举个例子就是
我开发环境是12400 + A770 + 32GB DDR4 3200 RAM,占用情况在主帖里已经显示

但再低一档配置的话使用12100 + A750 + 16GB DDR4 2666 RAM,也可以微调算子参数重新编译后实现贴近我开发环境的性能,实现自定义的cpu offload占用定义,尤其是在MoE模型运行时,只处理你需要的那几层丢进GPU,而不是永远只处理0层,或者全部丢进去
(当然了,A750 + 16GB要运行35B非常吃力)

问题描述:

继续上周的开源推广项目的记录,本篇不涉及推广内容,基本算是技术路线描述、性能统计和一点碎碎念,因此需要获取原项目的直接移步下面帖子里的Github链接即可

项目起始:
https://linux.do/t/topic/1829505

开源地址

Intel Arc Alchemist架构(A770 / A750)运行Qwen 3.5并支持多模态 开发调优
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 继续昨天的…

周末主要做的工作就是写基于Pytorch 的 XPU 自定义算子。

只支持 XPU,限定了 query/key/value/z 同 dtype,支持 float16、bfloat16、float32。但内部把 beta、g、norm_weight 和递推状态统一提升到 float32 来算,状态张量 working_state 也统一 float32,这是为了数值稳定做出的妥协,降级的话总是遇到乱码问题。

对每个 head 的输出做 RMSNorm,再乘 norm_weight,最后乘 silu(z) 门控。

Qwen3GatedDeltaNet.forward 先做投影和 depthwise conv,得到 query/key/value/z/beta/g,再把它们一次性交给 fused op。beta = sigmoid(b),g = -exp(A_log) * softplus(a + dt_bias),所以 exp(g) 实际上是衰减因子;解码时如果是单 token,会把上一步缓存的 recurrent state 作为 initial_state 传进去,并把新的 final_state 存回 cache。

你可以在下面这个截图里面看到cache生效的标志。

image1040×755 43.9 KB


这个自定义算子实现的是:

Qwen3 线性注意力里 Gated DeltaNet 的 XPU 融合核,把“递推状态更新 + 当前输出计算 + RMSNorm + z-gate”压成了一个 SYCL kernel,主要价值是减少中间张量和调度开销,针对 Intel Arc 上的推理和单步解码进行的特定优化。


对于各种量化格式

现在只测试了BF16、FP8、AWQ-4bit,其它量化格式还没测试


性能表现

Qwen3___5-9B-Claude-4___6-Opus-Reasoning-Distilled-v2(BF16)

平均输出速度稳定在 12 tokens/s

首字TTFT下降到了2000ms(相比上周的16000ms快了数倍

VRAM usage: 9.7 GB

System RAM usage: 17 GB

网友解答:
--【壹】--:

看又看不懂。只能给你点个赞了。


--【贰】--:

也是物尽其用了


--【叁】--:

这卡跟你这辈子值了


--【肆】--:

佬的技术太强了,好奇这种手写算子和llamacpp vulkan后端相比起来有什么优势吗,感觉后者会不会比较通用。


--【伍】--:

你看得懂,只是你比较谦虚


--【陆】--:

直接用llamacpp + vulkan的话性能上我还没有试过呢,主要是我之前不想在Win端装llamacpp

不过这个项目主要还是明显更偏“针对 Intel Arc Alchemist架构在Qwen 3.5 的垂直优化”,针对Qwen的线性注意力和Xe核心调用,特别是XPU int4,主要面向当前 XPU 路径;

llama.cpp 官方量化档位更全,从 1.5-bit 到 8-bit,也支持 CPU+GPU hybrid inference,技术支持这块确实比不了

做这个项目一方面是想多了解下架构信息,解决旧版Xe一代运行前沿模型的适配缺失问题;

另一方面也是闲着没事干(


手写的算子可以调整的地方很多,你可以根据CPU性能、RAM频率来调整cpu offload的具体参数,由于上周是先测试的Qwen3.5-35B-A3B的MoE,所以项目里对应的文件被命名为gate control了,但实际是通用的

举个例子就是
我开发环境是12400 + A770 + 32GB DDR4 3200 RAM,占用情况在主帖里已经显示

但再低一档配置的话使用12100 + A750 + 16GB DDR4 2666 RAM,也可以微调算子参数重新编译后实现贴近我开发环境的性能,实现自定义的cpu offload占用定义,尤其是在MoE模型运行时,只处理你需要的那几层丢进GPU,而不是永远只处理0层,或者全部丢进去
(当然了,A750 + 16GB要运行35B非常吃力)