<?xml version="1.0" encoding="UTF-8"?>


  

<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
  <title>李翔宇</title>
  <subtitle>李翔宇是清华大学智能产业研究院博士生，研究方向为端侧智能与具身智能。</subtitle>
  <link rel="self" type="application/atom+xml" href="https://xxxxyu.github.io/zh/atom.xml"/>
  <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/"/>
  <generator uri="https://www.getzola.org/">Zola</generator>
  <updated>2026-07-12T00:00:00+00:00</updated>
  <id>https://xxxxyu.github.io/zh/atom.xml</id>
  
  
  <entry xml:lang="zh">
    <title>用向量查表真正加速低比特 LLM 的并行推理</title>
    <published>2026-07-11T00:00:00+00:00</published>
    <updated>2026-07-11T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/vec-lut-parallel-low-bit-llm/"/>
    <id>https://xxxxyu.github.io/zh/blog/vec-lut-parallel-low-bit-llm/</id>
    <summary>Vec-LUT 将重复的标量查表转化为连续的向量读取，在 x86 和 ARM CPU 上将并行三值 LLM 推理加速至多 4.2 倍。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/vec-lut-parallel-low-bit-llm/">&lt;blockquote&gt;
&lt;p&gt;🏆 ACM MobiSys 2026 &lt;strong class=&quot;highlight&quot;&gt;最佳论文奖亚军&lt;&#x2F;strong&gt; &lt;br &#x2F;&gt;
🔗 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;3745756.3809200&quot;&gt;论文&lt;&#x2F;a&gt; | &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;OpenBitSys&#x2F;vlut.cpp&quot;&gt;代码&lt;&#x2F;a&gt; | &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;OpenBitSys&#x2F;vlut.cpp&#x2F;blob&#x2F;master&#x2F;media&#x2F;veclut_slides_mobisys_2026.pdf&quot;&gt;演示文稿&lt;&#x2F;a&gt; | &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mp.weixin.qq.com&#x2F;s&#x2F;_vSD8_r9GVjCppdVG2MqAg&quot;&gt;中文介绍（清华 AIR 公众号）&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;如今的超低比特 LLM（通常每个权重低于 4 比特）占用的内存很小。例如，微软 2B BitNet 模型的权重只占约 0.4 GB&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。照理说，它们应该能在笔记本电脑或智能手机上高速运行，对吗？&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;并不必然如此。&lt;&#x2F;strong&gt; 更低的位宽可以减少内存占用，但只有底层推理内核与数据表示和工作负载相匹配时，才能真正转化为速度优势。**查找表（lookup table, LUT）**内核在单 token 生成时表现很好，但并行处理大量 token 时，这种优势会大幅减弱。Vec-LUT 针对的正是这种并行访问模式。在五款 x86 和 ARM 设备上，与每权重位数（bits per weight, BPW）相近的基线相比，它将端到端预填充加速至多 &lt;strong&gt;4.2 倍&lt;&#x2F;strong&gt;；在 Snapdragon 8 Elite 上，其 CPU 实现甚至只用两个 CPU 核心，就超过了手机 NPU（llama.cpp 的 Hexagon 后端）。&lt;&#x2F;p&gt;




&lt;figure class=&quot;media-figure&quot; style=&quot;max-width: 80%;&quot;&gt;
  &lt;video class=&quot;media-figure__video&quot; playsinline controls autoplay muted loop preload=&quot;metadata&quot;&gt;
    &lt;source src=&quot;&amp;#x2F;videos&amp;#x2F;vec-lut-parallel-low-bit-llm&amp;#x2F;demo.mp4&quot; type=&quot;video&amp;#x2F;mp4&quot;&gt;
    &lt;a href=&quot;&amp;#x2F;videos&amp;#x2F;vec-lut-parallel-low-bit-llm&amp;#x2F;demo.mp4&quot;&gt;Download the video&lt;&#x2F;a&gt;.
  &lt;&#x2F;video&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;Vec-LUT 与 llama.cpp 对比：在单个 CPU 核心上进行 32 路并行解码，端到端速度提升 3 倍。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;zai-cpu-shang-jin-xing-duan-ce-llm-tui-li&quot;&gt;在 CPU 上进行端侧 LLM 推理&lt;&#x2F;h2&gt;
&lt;p&gt;移动助手、本地智能体和具身智能系统如今都在使用端侧模型，而这些设备的内存依然有限。量化研究已经从 8 比特&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;推进到 4 比特&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;、2 比特&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，再到如今的 &lt;strong&gt;1.58 比特三值&lt;&#x2F;strong&gt;模型。这类模型的权重取值为 &lt;code&gt;{-1, 0, 1}&lt;&#x2F;code&gt;，微软的 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;microsoft&#x2F;BitNet&quot;&gt;BitNet&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 让这种格式得到了广泛关注。&lt;&#x2F;p&gt;
&lt;p&gt;较小的权重取值集合也让&lt;strong&gt;基于查找表（LUT）的推理&lt;&#x2F;strong&gt;成为可能：内核不必在运行时反量化低比特权重、再与激活值相乘，而是可以预先计算一张小表，用查表替代大部分算术运算。此前，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;microsoft&#x2F;BitNet&quot;&gt;bitnet.cpp&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 和 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;microsoft&#x2F;T-MAC&quot;&gt;T-MAC&lt;&#x2F;a&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 等基于 LUT 的系统已经证明，CPU 在单 token 生成场景中也能具备竞争力。Vec-LUT 要回答的问题是：当工作负载变为并行处理时，同样的思路能否继续保持高效？&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;ji-yu-lut-de-tui-li-ru-he-gong-zuo&quot;&gt;基于 LUT 的推理如何工作&lt;&#x2F;h2&gt;
&lt;p&gt;量化 LLM 推理中的一项主要开销是&lt;strong&gt;混合精度通用矩阵乘法（mixed-precision general matrix multiplication, mpGeMM）&lt;&#x2F;strong&gt;，例如用 1.58 比特权重乘以 INT8 或 FP16 激活值。通用 CPU 和许多边缘加速器并不原生支持这类混合精度运算，因此推理框架通常需要反量化或定制内核&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。&lt;&#x2F;p&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vec-lut-parallel-low-bit-llm&amp;#x2F;lut-based-inference.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;基于 LUT 的 mpGeMM 在量化 Transformer 层中以查表取代反量化和乘法。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;p&gt;基于 LUT 的推理首先将权重矩阵拆成若干小组。低比特权重只有很少的可能模式：四个三值权重仅有 &lt;code&gt;3^4 = 81&lt;&#x2F;code&gt; 种组合。对于给定的激活向量，内核可以&lt;strong&gt;预先计算&lt;&#x2F;strong&gt;每一种“权重模式 × 激活值”的结果，并将其存入表中。运行时，打包后的权重组会成为这张表的&lt;strong&gt;索引&lt;&#x2F;strong&gt;，内核因而可以在内层循环中跳过反量化和乘法，转而累加查表所得的值。&lt;&#x2F;p&gt;



&lt;figure class=&quot;media-figure&quot; style=&quot;max-width: 60%;&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vec-lut-parallel-low-bit-llm&amp;#x2F;lut-example.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;一个具体的 LUT 示例：将三值权重组作为查表索引，计算 o = w × v。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;bing-xing-shi-wei-kuan-geng-di-su-du-geng-kuai&quot;&gt;并行时，位宽更低 ≠ 速度更快&lt;&#x2F;h2&gt;
&lt;p&gt;问题出在并行性上。现有 LUT 内核遵循一种我们称为&lt;strong&gt;标量 LUT&lt;&#x2F;strong&gt; 的范式，即 &lt;code&gt;1→1&lt;&#x2F;code&gt; 查表。每个 token 都有一张&lt;em&gt;自己的&lt;&#x2F;em&gt;表，因此处理 N 个 token 意味着构建或访问 N 张表，并执行 N 条独立的查表流。&lt;&#x2F;p&gt;
&lt;p&gt;在单 token 生成时，标量 LUT 效果很好，因为此时只有一张表和一条查表流，现有内核可以有效利用可用的内存带宽。但真实工作负载中，&lt;strong&gt;并行推理&lt;&#x2F;strong&gt;非常常见：中长提示词的预填充&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;、&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#10&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;、同时服务多个请求&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#11&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;、&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#12&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;、测试时并行扩展&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#13&quot;&gt;13&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;、&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#14&quot;&gt;14&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;以及推测解码&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#15&quot;&gt;15&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;、&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#16&quot;&gt;16&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，都会同时处理多个 token。在这些场景中，标量 LUT 会失去大部分优势：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;内存带宽利用率降至 &lt;strong&gt;40% 以下&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;有时甚至比完全不用 LUT &lt;em&gt;还慢&lt;&#x2F;em&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;根源在于内存访问。查表是一种&lt;strong&gt;随机且不连续&lt;&#x2F;strong&gt;的操作。在多张按 token 划分的表上重复查找，尤其是这些表的总工作集超过缓存容量时，大量时间会耗在搬运分散的数据上，而不是有效的累加运算。在我们对一个典型标量 LUT 内核的性能分析中，查表（包括加载权重）占 mpGeMM 延迟的近&lt;strong&gt;一半&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;下表展示了 T-MAC 标量 LUT mpGeMM 内核的耗时分布，数据来自 Orange Pi 5 Plus 上的单线程测试：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;GeMM 形状（&lt;code&gt;M × K&lt;&#x2F;code&gt;）&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;预计算&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;查表&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;累加&lt;&#x2F;th&gt;&lt;th style=&quot;text-align: right&quot;&gt;缩放&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;320 × 3200&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;0.8%&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;47.6%&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;25.0%&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;26.6%&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;128 × 8640&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;0.7%&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;&lt;strong&gt;47.3%&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;25.5%&lt;&#x2F;td&gt;&lt;td style=&quot;text-align: right&quot;&gt;26.4%&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;对于并行推理，仅仅优化算术运算无法消除这个由查表主导的内存瓶颈。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;he-xin-si-lu-yi-ci-cha-chu-n-ge-jie-guo&quot;&gt;核心思路：一次查出 N 个结果&lt;&#x2F;h2&gt;
&lt;p&gt;关键观察是：&lt;strong&gt;查表索引来自权重，而所有 token 共享同一组权重。&lt;&#x2F;strong&gt; 同一个权重索引适用于并行组中的每个 token，因此没有必要按 token 分别查表。&lt;&#x2F;p&gt;
&lt;p&gt;Vec-LUT 将查表单位从标量变为向量。它不再为每个 token 建一张表，而是为所有并行 token 构建一张&lt;strong&gt;统一的表&lt;&#x2F;strong&gt;。表中的每个条目不再存储单个标量结果，而是存储一个结果&lt;em&gt;向量&lt;&#x2F;em&gt;，其中每项对应一个 token。这样，一个权重索引就能触发一次 &lt;code&gt;1→N&lt;&#x2F;code&gt; 查表，取回整个 token 组的结果。&lt;&#x2F;p&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vec-lut-parallel-low-bit-llm&amp;#x2F;scalar-vs-vector-lut.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;Vec-LUT：将按 token 执行的 1→1 查表转化为一次跨 token 的 1→N 查表。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;p&gt;由此产生的访问模式有三个优点：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;每个权重索引原本需要 N 次独立查表，现在只需一次向量查表。&lt;&#x2F;li&gt;
&lt;li&gt;随机、分散的查表变为连续的向量读取，随后执行向量累加。&lt;&#x2F;li&gt;
&lt;li&gt;内核不再依赖 ARM &lt;code&gt;TBL&lt;&#x2F;code&gt; 或 x86 &lt;code&gt;PSHUF&lt;&#x2F;code&gt; 等硬件查表指令，减少了对特定指令集架构（ISA）的依赖。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;在我们的延迟分解中，查表所占比例从 T-MAC 的 &lt;strong&gt;47%&lt;&#x2F;strong&gt; 降到了 &lt;strong&gt;1% 以下&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;rang-xiang-liang-lut-zhen-zheng-shi-yong&quot;&gt;让向量 LUT 真正实用&lt;&#x2F;h2&gt;
&lt;p&gt;向量 LUT 在实践中能否高效，取决于两个工程细节。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;张量布局。&lt;&#x2F;strong&gt; 只有周围张量采用兼容的布局，统一查找表才能发挥作用。布局不匹配会使内核速度降低至多 &lt;strong&gt;12 倍&lt;&#x2F;strong&gt;。我们的**以向量 LUT 为中心的张量布局（Vector LUT-Centric Tensor Layout）**让激活、查找表和输出按 token 连续存储，打包权重则按分块连续存储。权重重排在线下完成，运行时的激活与输出变换则融合进内核，以尽量减少额外开销。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;缓存局部性。&lt;&#x2F;strong&gt; 向量 LUT 会使表的大小增加 N 倍。序列长度为 512 时，Llama3 8B 的一次 GeMM 所需的 2 比特 INT16 向量表将超过 &lt;strong&gt;280 MiB&lt;&#x2F;strong&gt;，远超边缘 CPU 的缓存容量。我们的**缓存感知流式查表（Cache-Aware Streamed Lookup）**将预计算和查表流水线切分为与缓存容量相适应的小块，再依次流式处理，使大部分 LUT 工作留在片上缓存中，避免反复访问一张巨大的随机访问表。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;摆脱硬件查表指令后，位宽和形状限制也随之放宽。由此，我们可以采用&lt;strong&gt;灵活的低于 2 比特打包&lt;&#x2F;strong&gt;：&lt;code&gt;I1&lt;&#x2F;code&gt; 打包达到&lt;strong&gt;每权重 1.60 比特&lt;&#x2F;strong&gt;，同时支持范围广泛的权重形状。拓扑预计算、INT16–INT32 分层累加等进一步优化，则减少了剩余开销。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;shi-yan-jie-guo-5-kuan-she-bei-x-3-ge-mo-xing&quot;&gt;实验结果：5 款设备 × 3 个模型&lt;&#x2F;h2&gt;
&lt;p&gt;我们在五款 x86&#x2F;ARM 设备（台式机、笔记本电脑、单板计算机、智能手机和 CPU 服务器）以及三个三值 LLM——Falcon3 1B、HF BitNet 3B 和 Llama3 8B——上评估了 Vec-LUT。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;端到端预填充：&lt;&#x2F;strong&gt; 与 BPW 相近的基线相比，&lt;code&gt;I1&lt;&#x2F;code&gt;（1.60 BPW）加速至多 &lt;strong&gt;4.2 倍&lt;&#x2F;strong&gt;，&lt;code&gt;I2&lt;&#x2F;code&gt;（2.00 BPW）加速至多 &lt;strong&gt;2.6 倍&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;CPU 对比 NPU：&lt;&#x2F;strong&gt; 在 Snapdragon 8 Elite 上，Vec-LUT &lt;code&gt;I2&lt;&#x2F;code&gt; 仅使用 &lt;strong&gt;2 个 CPU 核心&lt;&#x2F;strong&gt;，进行 Llama3 8B 预填充时的吞吐量即可达到 llama.cpp Q4_0 Hexagon NPU 后端的 &lt;strong&gt;1.05–1.12 倍&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;连续批处理：&lt;&#x2F;strong&gt; 在一台 8 核、每小时 &lt;strong&gt;0.50 美元&lt;&#x2F;strong&gt;的 AWS Graviton 3 服务器上，Vec-LUT &lt;code&gt;I2&lt;&#x2F;code&gt; 面对 32 个并行请求时，以 &lt;strong&gt;273.5 tokens&#x2F;s&lt;&#x2F;strong&gt; 的速度服务 Falcon3 1B，比 llama.cpp &lt;code&gt;TQ2_0&lt;&#x2F;code&gt; 快 &lt;strong&gt;1.4 倍&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;能效：&lt;&#x2F;strong&gt; 相比 llama.cpp，每焦耳生成的 token 数至多提高 &lt;strong&gt;2.1 倍&lt;&#x2F;strong&gt;；相比 T-MAC，至多提高 &lt;strong&gt;1.8 倍&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;



&lt;figure class=&quot;media-figure&quot; style=&quot;max-width: 80%;&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vec-lut-parallel-low-bit-llm&amp;#x2F;eval-prefill.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;不同模型、设备和线程数下的端到端预填充性能对比。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;shi-xian-yu-gua-yong-fan-wei&quot;&gt;实现与适用范围&lt;&#x2F;h2&gt;
&lt;p&gt;我们的实现 &lt;strong&gt;vlut.cpp&lt;&#x2F;strong&gt; 是 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ggml-org&#x2F;llama.cpp&quot;&gt;llama.cpp&lt;&#x2F;a&gt; 的轻量扩展。它面向主流 x86 和 ARM CPU，沿用了大家熟悉的 llama.cpp 式构建和使用流程，并作为开源 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;OpenBitSys&quot;&gt;OpenBitSys&lt;&#x2F;a&gt; 项目的一部分发布。&lt;&#x2F;p&gt;
&lt;p&gt;当三值模型检查点可用（例如通过量化感知训练获得）、工作负载包含大量并行推理（预填充、批处理、推测解码或并行测试时扩展），且 CPU 内存占用和吞吐量是主要限制时，Vec-LUT 最能发挥作用。&lt;&#x2F;p&gt;
&lt;p&gt;Vec-LUT 将查表开销降到 1% 以下后，&lt;strong&gt;向量加法&lt;&#x2F;strong&gt;（即累加查表结果）会成为主要开销。在实测的 HF BitNet 3B 工作负载中，它约占端到端预填充延迟的 65%，自然也就成为未来&lt;strong&gt;以向量 LUT 为中心的加速器&lt;&#x2F;strong&gt;值得重点优化的目标。&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;em&gt;我们的团队正在招聘博士后和实习生，研究方向包括物理 AI 基础模型、LLM 训练与推理系统等。欢迎联系&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tingcao952.github.io&quot;&gt;曹汀老师&lt;&#x2F;a&gt;。&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;Shuming Ma et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2504.12285&quot;&gt;“BitNet b1.58 2B4T Technical Report”&lt;&#x2F;a&gt;, arXiv, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;Tim Dettmers et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2208.07339&quot;&gt;“LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale”&lt;&#x2F;a&gt;, NeurIPS, 2022.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;Elias Frantar et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2210.17323&quot;&gt;“GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers”&lt;&#x2F;a&gt;, ICLR, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;4&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;4&lt;&#x2F;sup&gt;
&lt;p&gt;Mengzhao Chen et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2407.11062&quot;&gt;“EfficientQAT: Efficient Quantization-Aware Training for Large Language Models”&lt;&#x2F;a&gt;, ACL, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;5&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;5&lt;&#x2F;sup&gt;
&lt;p&gt;Shuming Ma et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2402.17764&quot;&gt;“The Era of 1-bit LLMs: All Large Language Models are in 1.58 Bits”&lt;&#x2F;a&gt;, arXiv, 2024.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;6&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;6&lt;&#x2F;sup&gt;
&lt;p&gt;Jinheng Wang et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aclanthology.org&#x2F;2025.acl-long.457&#x2F;&quot;&gt;“bitnet.cpp: Efficient Edge Inference for Ternary LLMs”&lt;&#x2F;a&gt;, ACL, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;7&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;7&lt;&#x2F;sup&gt;
&lt;p&gt;Jianyu Wei et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;3689031.3696099&quot;&gt;“T-MAC: CPU Renaissance via Table Lookup for Low-Bit LLM Deployment on Edge”&lt;&#x2F;a&gt;, EuroSys, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;8&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;8&lt;&#x2F;sup&gt;
&lt;p&gt;Shijie Cao, Lingxiao Ma, and Ting Cao, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.microsoft.com&#x2F;en-us&#x2F;research&#x2F;blog&#x2F;advances-to-low-bit-quantization-enable-llms-on-edge-devices&#x2F;&quot;&gt;“Advances to low-bit quantization enable LLMs on edge devices”&lt;&#x2F;a&gt;, Microsoft Research Blog, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;9&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;9&lt;&#x2F;sup&gt;
&lt;p&gt;Hao Wen et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dl.acm.org&#x2F;doi&#x2F;10.1145&#x2F;3636534.3649379&quot;&gt;“AutoDroid: LLM-powered Task Automation in Android”&lt;&#x2F;a&gt;, MobiCom, 2024.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;10&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;10&lt;&#x2F;sup&gt;
&lt;p&gt;Leming Shen et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dl.acm.org&#x2F;doi&#x2F;10.1145&#x2F;3680207.3723486&quot;&gt;“AutoIOT: LLM-Driven Automated Natural Language Programming for AIoT Applications”&lt;&#x2F;a&gt;, MobiCom, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;11&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;11&lt;&#x2F;sup&gt;
&lt;p&gt;Zheyu Shen et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dl.acm.org&#x2F;doi&#x2F;10.1145&#x2F;3711875.3729144&quot;&gt;“EdgeLoRA: An Efficient Multi-Tenant LLM Serving System on Edge Devices”&lt;&#x2F;a&gt;, MobiSys, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;12&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;12&lt;&#x2F;sup&gt;
&lt;p&gt;Borui Li et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;aclanthology.org&#x2F;2025.acl-long.1140&#x2F;&quot;&gt;“MobiLoRA: Accelerating LoRA-Based LLM Inference on Mobile Devices via Context-Aware KV Cache Optimization”&lt;&#x2F;a&gt;, ACL, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;13&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;13&lt;&#x2F;sup&gt;
&lt;p&gt;Mouxiang Chen et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2505.10475&quot;&gt;“Parallel Scaling Law for Language Models”&lt;&#x2F;a&gt;, NeurIPS, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;14&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;14&lt;&#x2F;sup&gt;
&lt;p&gt;Ryan Ehrlich et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2501.14723&quot;&gt;“CodeMonkeys: Scaling Test-Time Compute for Software Engineering”&lt;&#x2F;a&gt;, arXiv, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;15&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;15&lt;&#x2F;sup&gt;
&lt;p&gt;Yaniv Leviathan et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2211.17192&quot;&gt;“Fast Inference from Transformers via Speculative Decoding”&lt;&#x2F;a&gt;, ICML, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;16&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;16&lt;&#x2F;sup&gt;
&lt;p&gt;Charlie Chen et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2302.01318&quot;&gt;“Accelerating Large Language Model Decoding with Speculative Sampling”&lt;&#x2F;a&gt;, arXiv, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
  </entry>
  
  
  <entry xml:lang="zh">
    <title>增强 vLLM 对 GPTQv2 格式的支持：分析与实现</title>
    <published>2025-10-12T00:00:00+00:00</published>
    <updated>2026-07-11T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/vllm-gptqv2-support/"/>
    <id>https://xxxxyu.github.io/zh/blog/vllm-gptqv2-support/</id>
    <summary>分析 vLLM 对 GPTQv2 格式支持的局限，以及低比特非对称量化推理所需的 CUDA 内核改动。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/vllm-gptqv2-support/">&lt;blockquote&gt;
&lt;p&gt;Issue（已关闭）：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vllm-project&#x2F;vllm&#x2F;issues&#x2F;26343&quot;&gt;#26343&lt;&#x2F;a&gt; &lt;br &#x2F;&gt;
Pull request（已合并）：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vllm-project&#x2F;vllm&#x2F;pull&#x2F;26092&quot;&gt;#26092&lt;&#x2F;a&gt; &lt;br &#x2F;&gt;
Commit：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vllm-project&#x2F;vllm&#x2F;commit&#x2F;5cc6bddb6ef5e8e5c10de8122a43fd6e8c1e3b4b&quot;&gt;&lt;code&gt;5cc6bdd&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;yin-yan&quot;&gt;引言&lt;&#x2F;h2&gt;
&lt;p&gt;在这次改动之前，vLLM 对 &lt;strong&gt;GPTQv2 格式&lt;&#x2F;strong&gt;模型的支持并不完善，采用&lt;strong&gt;低比特（2&#x2F;3-bit）或非对称量化&lt;&#x2F;strong&gt;的模型尤其如此。vLLM 加载这些模型时不会明确报错，却会将其按 GPTQv1 处理，导致推理质量下降，并经常重复生成 &lt;code&gt;!!!&lt;&#x2F;code&gt; token（参见 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vllm-project&#x2F;vllm&#x2F;issues&#x2F;26343&quot;&gt;issue #26343&lt;&#x2F;a&gt;）。&lt;&#x2F;p&gt;
&lt;p&gt;问题来自 GPTQv1 与 GPTQv2 checkpoint 在&lt;strong&gt;零点处理&lt;&#x2F;strong&gt;方式上的差异，而 vLLM 的 fallback GPTQ GeMM 内核没有考虑这一点。本文分析了故障原因，并记录 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vllm-project&#x2F;vllm&#x2F;pull&#x2F;26092&quot;&gt;PR #26092&lt;&#x2F;a&gt; 中的内核改动：在保持向后兼容的同时加入 GPTQv2 支持。&lt;&#x2F;p&gt;
&lt;p&gt;最终实现让 vLLM 的 fallback GPTQ 路径能够支持采用低比特和非对称配置的 GPTQv2 模型。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bei-jing-yu-yu-bei-zhi-shi&quot;&gt;背景与预备知识&lt;&#x2F;h2&gt;
&lt;p&gt;我是在使用 vLLM 部署以 GPTQv2 格式存储的低比特（如 2-bit）非对称量化模型时遇到这个问题的。&lt;&#x2F;p&gt;
&lt;p&gt;介绍实现细节前，先说明两点背景：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;非对称量化会为每组权重调整零点，因此对低比特量化很有帮助。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;GPTQv2 能在非对称量化 checkpoint 中更完整地保留零点信息。&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;llm-de-quan-zhong-liang-hua&quot;&gt;LLM 的权重量化&lt;&#x2F;h3&gt;
&lt;p&gt;权重量化将高精度模型权重（如 16&#x2F;32-bit）映射为较少的比特（如 2&#x2F;3&#x2F;4&#x2F;8-bit）。这种方法常用于 LLM 部署，尤其适合资源紧张的场景。&lt;&#x2F;p&gt;
&lt;p&gt;从技术上说，权重量化会把范围较大的高精度权重（例如 FP16 的 $[-65504, 65504]$）映射到有限的量化权重范围（例如 $b$-bit 无符号整数的 $[0, 2^b - 1]$）。
这一映射通常需要一个用于压缩取值范围的缩放因子（$scale$），以及一个用于平移零点的偏置（$zero$）。记 $w_o$ 为 $[w_{min}, w_{max}]$ 范围内的原始权重（通常对应一组权重），$w_q$ 为量化后的权重，则一种简单的 $b$-bit 整数量化可写为：&lt;&#x2F;p&gt;
&lt;p&gt;\[
scale = \frac{w_{max} - w_{min}}{2^b - 1}
\]&lt;&#x2F;p&gt;
&lt;p&gt;\[
zero = - \mathrm{round}(\frac{w_{min}}{scale})
\]&lt;&#x2F;p&gt;
&lt;p&gt;\[
w_q = \mathrm{clamp}(\mathrm{round}(\frac{w_o}{scale}) + zero)
\]&lt;&#x2F;p&gt;
&lt;p&gt;反量化时，按下式恢复原始权重 $\hat{w}_o$：&lt;&#x2F;p&gt;
&lt;p&gt;\[
\hat{w}_o = (w_q - zero) \cdot scale
\]&lt;&#x2F;p&gt;
&lt;p&gt;根据是否需要零点，可以将量化方法分为两类：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;对称量化&lt;&#x2F;em&gt;假设 $w_{max} = -w_{min}$，因此 $zero = \mathrm{round}(\frac{2^b - 1}{2})$ 是固定值。此时只要知道比特宽度，$zero$ 就不再提供额外信息。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;非对称量化&lt;&#x2F;em&gt;不作这一假设。它的 $zero$ 会随权重组而变化，必须将其存储下来，才能准确恢复量化值。&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;大多数 GPTQ 实现采用 4-bit 对称量化。在更低的比特宽度下，非对称量化可以让零点适应每组权重，从而减小量化误差。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;gptq-liang-hua-fang-fa-yu-checkpoint-ge-shi&quot;&gt;GPTQ：量化方法与 Checkpoint 格式&lt;&#x2F;h3&gt;
&lt;p&gt;GPTQ&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 是生成式 Transformer（主要是 LLM 和 VLM）最常用的训练后&lt;strong&gt;量化方法&lt;&#x2F;strong&gt;之一。
它利用近似二阶信息（层 Hessian 的逆）来减小量化误差。
GPTQ 也可以指 GPTQ 量化模型所使用的 &lt;strong&gt;checkpoint 格式&lt;&#x2F;strong&gt;，例如 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AutoGPTQ&#x2F;AutoGPTQ&quot;&gt;AutoGPTQ&lt;&#x2F;a&gt; 生成的格式。Daniël de Kok 的 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;danieldk.eu&#x2F;GPTQ-Checkpoint-Format&quot;&gt;GPTQ Checkpoint Format&lt;&#x2F;a&gt; 对这种表示方式有详细说明。&lt;&#x2F;p&gt;
&lt;p&gt;GPTQ 生态既包括实现该量化方法或导出相应 checkpoint 格式的量化库，也包括执行这些 checkpoint 的内核与推理框架。&lt;&#x2F;p&gt;
&lt;p&gt;量化库：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ModelCloud&#x2F;GPTQModel&quot;&gt;GPTQModel&lt;&#x2F;a&gt; 是 AutoGPTQ 仍在积极维护的后继项目，支持更多模型和后端。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;AutoGPTQ&#x2F;AutoGPTQ&quot;&gt;AutoGPTQ&lt;&#x2F;a&gt; 曾是常用的 GPTQ 量化库，但现已停止维护。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;IST-DASLab&#x2F;gptq&quot;&gt;gptq&lt;&#x2F;a&gt; 是 GPTQ 论文的官方实现。&lt;&#x2F;li&gt;
&lt;li&gt;其他量化库也会实现 GPTQ 量化，或以 GPTQ 格式导出量化模型。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;计算（CUDA）内核：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;IST-DASLab&#x2F;marlin&quot;&gt;Marlin&lt;&#x2F;a&gt; 是面向 4-bit GPTQ 模型的高性能 W4A16 mpGeMM 内核。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;turboderp-org&#x2F;exllamav2&quot;&gt;ExLlamaV2&lt;&#x2F;a&gt; 是一个推理库，为 GPTQ 模型提供高性能内核。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;microsoft&#x2F;BitBLAS&quot;&gt;BitBLAS&lt;&#x2F;a&gt; 是支持 GPTQ 模型的高性能低比特 mpGeMM 内核库。&lt;&#x2F;li&gt;
&lt;li&gt;还有许多其他内核库也支持 GPTQ 格式模型。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vllm-project&#x2F;vllm&quot;&gt;vLLM&lt;&#x2F;a&gt; 等 LLM 推理框架会集成这些量化库和内核库，从而高效部署 GPTQ 模型。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cong-gptqv1-dao-gptqv2&quot;&gt;从 GPTQv1 到 GPTQv2&lt;&#x2F;h3&gt;
&lt;p&gt;GPTQv2 这一名称同时用于指代量化方法和 checkpoint 格式的改动：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;量化方法：GPTQv2（也称 GPTAQ）引入非对称校准，以减小从前面各层传播而来的量化误差&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。它最早在 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Intelligent-Computing-Lab-Panda&#x2F;GPTAQ&quot;&gt;GPTAQ&lt;&#x2F;a&gt; 中实现，之后集成进 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ModelCloud&#x2F;GPTQModel&quot;&gt;GPTQModel&lt;&#x2F;a&gt;，可通过 &lt;code&gt;v2=True&lt;&#x2F;code&gt; 启用。&lt;&#x2F;li&gt;
&lt;li&gt;Checkpoint 格式：GPTQv2 与 GPTQv1 存储零点的方式不同。GPTQv1 存储 $\mathrm{clamp}(zero - 1)$，并在运行时反量化前加 $1$&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;；GPTQv2 则直接存储准确的 $zero$ 值，无需调整。在 GPTQModel 中可通过 &lt;code&gt;format=&quot;gptq_v2&quot;&lt;&#x2F;code&gt; 启用这一格式。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;与 GPTQv1 一样，量化方法和 checkpoint 格式之间并不绑定。因此，可以：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;将其他方法量化的模型存为 GPTQv2 格式，例如 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;huggingface.co&#x2F;BitDistiller&#x2F;Qwen-8B-w2g64-gptq&quot;&gt;BitDistiller&#x2F;Qwen-8B-w2g64-gptq&lt;&#x2F;a&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;只在 GPTQModel 中设置 &lt;code&gt;format=&quot;gptq_v2&quot;&lt;&#x2F;code&gt;，把采用 GPTQv1 方法量化的模型存为 GPTQv2 格式。&lt;&#x2F;li&gt;
&lt;li&gt;只在 GPTQModel 中设置 &lt;code&gt;v2=True&lt;&#x2F;code&gt;，把采用 GPTQv2 方法量化的模型存为 GPTQv1 格式。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;从 GPTQv1 转换到 GPTQv2 是无损的，反向转换则不是。GPTQv1 的减一表示会把 $0 - 1$ clamp 到 $0$，因此损失一部分零点范围。以 INT2 量化为例，有效范围会从 $[0,3]$ 缩小到 $[1,3]$。
所以，&lt;strong&gt;GPTQv2 更适合非对称 checkpoint，尤其是在低比特宽度下。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yuan-yin-fen-xi&quot;&gt;原因分析&lt;&#x2F;h2&gt;
&lt;p&gt;故障源于 vLLM 如何将不同的 GPTQ 配置路由到已有内核：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;vLLM 有多个兼容 GPTQ 的 GeMM 内核，并为它们预先规定了优先级&lt;&#x2F;strong&gt;——包括 Marlin、BitBLAS 和 fallback 内核。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Marlin 等优化内核仅在有限配置下支持 GPTQv2&lt;&#x2F;strong&gt;——即 4&#x2F;8-bit 对称量化。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;fallback 内核支持更多比特宽度和非对称量化，却不支持 GPTQv2&lt;&#x2F;strong&gt;——这正是本次问题的根源。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;!-- markdownlint-disable MD046 --&gt;
&lt;div class=&quot;mermaid-container&quot;&gt;
&lt;pre class=&quot;mermaid&quot;&gt;
graph TD
    A[VllmConfig] --&amp;gt; B[ModelConfig._verify_quantization]

    B --&amp;gt; |&amp;quot;优先级: gptq_marlin &amp;gt; gptq_bitblas &amp;gt; gptq&amp;quot;| E[QuantizationConfig.get_quant_method]

    E --&amp;gt;|4&amp;#x2F;8-bit + sym| J[GPTQMarlinLinearMethod]
    E --&amp;gt;|4&amp;#x2F;8-bit + sym| K[GPTQBitBLASLinearMethod]
    E --&amp;gt;|2&amp;#x2F;3&amp;#x2F;4&amp;#x2F;8-bit + sym&amp;#x2F;asym| L[GPTQLinearMethod]

    J --&amp;gt; JJ[MarlinLinearKernel]
    K --&amp;gt; KK[BitBLASLinearKernel]
    L --&amp;gt; LL[直接调用内核]

    JJ --&amp;gt; M[gptq_marlin_gemm&amp;lt;br&amp;#x2F;&amp;gt;CUDA 内核]
    KK --&amp;gt; N[bitblas.Matmul&amp;lt;br&amp;#x2F;&amp;gt;外部库]
    LL --&amp;gt; O[gptq_gemm&amp;lt;br&amp;#x2F;&amp;gt;CUDA 内核]

    M --&amp;gt; Q[&amp;quot;✓ Marlin: gptq&amp;#x2F;gptq_v2&amp;quot;]
    N --&amp;gt; R[&amp;quot;✓ BitBLAS: gptq&amp;#x2F;gptq_v2&amp;quot;]
    O --&amp;gt; S[&amp;quot;✗ GPTQ: 仅 gptq&amp;quot;]

    style J fill:#90EE90
    style K fill:#90EE90
    style L fill:#FFB6C1
    style Q fill:#90EE90
    style R fill:#90EE90
    style S fill:#FFB6C1
&lt;&#x2F;pre&gt;
&lt;&#x2F;div&gt;
&lt;!-- markdownlint-enable MD046 --&gt;
&lt;h3 id=&quot;vllm-de-nei-he-lu-you-ceng-ji&quot;&gt;vLLM 的内核路由层级&lt;&#x2F;h3&gt;
&lt;p&gt;首先需要了解 vLLM 如何为 GPTQ 等量化方法选择计算内核。相关逻辑位于 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.vllm.ai&#x2F;en&#x2F;stable&#x2F;design&#x2F;arch_overview.html#llm-engine&quot;&gt;LLMEngine&lt;&#x2F;a&gt; 的模型执行部分。为便于说明，本文只讨论稠密模型，不涉及 MoE。调用层级如下：&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;1. 模型级量化配置：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;在模型实现（&lt;code&gt;vllm&#x2F;model_executor&#x2F;models&lt;&#x2F;code&gt;）中，初始化模型时会传入 &lt;code&gt;vllm_config: VllmConfig&lt;&#x2F;code&gt;，其中包含 &lt;code&gt;quant_config: QuantizationConfig&lt;&#x2F;code&gt;。
&lt;ul&gt;
&lt;li&gt;每种量化方式都会扩展 &lt;code&gt;QuantizationConfig&lt;&#x2F;code&gt;，提供与该量化方式相关的 override（例如 &lt;code&gt;GPTQConfig&lt;&#x2F;code&gt;）。参见&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.vllm.ai&#x2F;en&#x2F;stable&#x2F;api&#x2F;vllm&#x2F;model_executor&#x2F;layers&#x2F;quantization&#x2F;index.html&quot;&gt;全部量化方式&lt;&#x2F;a&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;如果 &lt;code&gt;quant_config&lt;&#x2F;code&gt; 中没有指定量化方式，&lt;code&gt;ModelConfig._verify_quantization&lt;&#x2F;code&gt; 会按优先级列表选择一种（见&lt;a href=&quot;https:&#x2F;&#x2F;xxxxyu.github.io&#x2F;zh&#x2F;blog&#x2F;vllm-gptqv2-support&#x2F;#vllm-gptq-support-notes&quot;&gt;下文&lt;&#x2F;a&gt;）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;该模型的每个线性模块都以 &lt;code&gt;quant_config&lt;&#x2F;code&gt; 初始化。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;2. 层级量化配置（线性方法）：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;初始化时，每个量化线性模块都会确定 &lt;code&gt;quant_method = quant_config.get_quant_method&lt;&#x2F;code&gt;。
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get_quant_method&lt;&#x2F;code&gt; 会根据量化配置返回具体的线性方法类（继承自 &lt;code&gt;LinearMethodBase&lt;&#x2F;code&gt;，例如 &lt;code&gt;GPTQLinearMethod&lt;&#x2F;code&gt;）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;每个线性模块通过 override &lt;code&gt;LinearMethodBase.apply&lt;&#x2F;code&gt; 来调用计算内核（例如 &lt;code&gt;GPTQLinearMethod.apply&lt;&#x2F;code&gt; 调用 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt;）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;3.（可选）内核选择（线性内核）：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;vLLM 支持通过多种方式从线性方法类路由到底层 CUDA 内核：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;直接调用。例如，&lt;code&gt;GPTQLinearMethod&lt;&#x2F;code&gt; 直接路由到 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt;，这是 vLLM 注册的自定义算子（实现在 &lt;code&gt;csrc&#x2F;quantization&#x2F;gptq&lt;&#x2F;code&gt;）。&lt;&#x2F;li&gt;
&lt;li&gt;间接调用。如果一个线性方法有多个可用内核，或一个内核可供多个线性方法使用，vLLM 可以扩展 &lt;code&gt;MPLinearKernel&lt;&#x2F;code&gt; 类，并将其作为路由到该内核的接口（位于 &lt;code&gt;vllm&#x2F;model_executor&#x2F;layers&#x2F;quantization&#x2F;kernels&#x2F;mixed_precision&lt;&#x2F;code&gt;）。例如，&lt;code&gt;GPTQBitBLASLinearMethod&lt;&#x2F;code&gt; 路由到 &lt;code&gt;BitBLASLinearKernel&lt;&#x2F;code&gt;，&lt;code&gt;GPTQMarlinLinearMethod&lt;&#x2F;code&gt; 则调用 &lt;code&gt;choose_mp_linear_kernel&lt;&#x2F;code&gt; 进行灵活路由。&lt;&#x2F;li&gt;
&lt;li&gt;外部调用（与上述方式正交）。vLLM 支持调用外部库中的内核。例如，&lt;code&gt;BitBLASLinearKernel&lt;&#x2F;code&gt; 会调用 &lt;code&gt;bitblas&lt;&#x2F;code&gt; Python 库中的 &lt;code&gt;Matmul&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;vllm-dui-gptq-v2-ge-shi-de-zhi-chi&quot;&gt;vLLM 对 GPTQ(v2) 格式的支持&lt;&#x2F;h3&gt;
&lt;p&gt;vLLM 集成了多个适用于 GPTQ 格式模型的优化内核，包括 Marlin、ExLlamaV2 和 BitBLAS，同时也为不受支持的配置提供 fallback 内核。按线性方法划分，支持矩阵如下：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方法&lt;&#x2F;th&gt;&lt;th&gt;Bits&lt;&#x2F;th&gt;&lt;th&gt;Sym&lt;&#x2F;th&gt;&lt;th&gt;GPTQ 格式&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;GPTQMarlin&lt;&#x2F;td&gt;&lt;td&gt;4,8&lt;&#x2F;td&gt;&lt;td&gt;True&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;gptq, gptq_v2&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;GPTQBitBLAS&lt;&#x2F;td&gt;&lt;td&gt;4,8&lt;&#x2F;td&gt;&lt;td&gt;True&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;gptq, gptq_v2&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;GPTQ&lt;&#x2F;td&gt;&lt;td&gt;2,3,4,8&lt;&#x2F;td&gt;&lt;td&gt;Any&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;gptq&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;a id=&quot;vllm-gptq-support-notes&quot;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;说明：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;所有方法都支持 4&#x2F;8-bit 对称量化。vLLM 会根据预定义的量化 override 优先级（位于 &lt;code&gt;ModelConfig._verify_quantization&lt;&#x2F;code&gt;），选择当前配置下支持且性能最好的方法：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#1F2328, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;overrides&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;                ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;                #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; gptq_marlin_24 requires special format,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;                #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; so we don&amp;#39;t consider here.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;                &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;gptq_marlin_24&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;                #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; Priority: gptq_marlin &amp;gt; gptq_bitblas &amp;gt; gptq.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;                &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;gptq_marlin&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;                &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;gptq_bitblas&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;                ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;只有 &lt;code&gt;GPTQLinearMethod&lt;&#x2F;code&gt; 支持 2&#x2F;3-bit 和非对称量化，但它此前不支持 GPTQv2；另外两种方法已经支持该格式。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;因此，vLLM 的这条 fallback 路径既无法支持 GPTQv2 格式的 2&#x2F;3-bit 量化，也无法支持其非对称量化，这正是 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vllm-project&#x2F;vllm&#x2F;pull&#x2F;26092&quot;&gt;PR #26092&lt;&#x2F;a&gt; 的动机。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jie-jue-fang-an&quot;&gt;解决方案&lt;&#x2F;h2&gt;
&lt;p&gt;根据以上分析，需要调整一个 GPTQ 线性方法及其内核，才能让 GPTQv2 模型覆盖这些配置。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fang-an-diao-zheng-gptq-xian-xing-fang-fa-yu-nei-he&quot;&gt;方案：调整 GPTQ 线性方法与内核&lt;&#x2F;h3&gt;
&lt;p&gt;要加入这项支持，至少需要调整一种现有的线性方法：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GPTQMarlinLinearMethod&lt;&#x2F;code&gt; 不支持 2&#x2F;3-bit 和非对称量化。扩展它还需要修改 vLLM 的 Marlin CUDA 内核，而该内核面向 4&#x2F;8-bit 对称量化。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;GPTQBitBLASLinearMethod&lt;&#x2F;code&gt; 在线性方法层面同样不支持 2&#x2F;3-bit 和非对称量化。虽然 &lt;code&gt;bitblas&lt;&#x2F;code&gt; 库支持所需的 &lt;code&gt;bits&lt;&#x2F;code&gt; 与 &lt;code&gt;sym&lt;&#x2F;code&gt; 取值，但这条路径依赖可选的 &lt;code&gt;bitblas&lt;&#x2F;code&gt; 包。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;GPTQLinearMethod&lt;&#x2F;code&gt; 已经支持所需的比特宽度和对称&#x2F;非对称模式，只需在 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt; CUDA 内核中根据格式处理零点，因此是首选方案。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;因此，实现中选择调整 &lt;code&gt;GPTQLinearMethod&lt;&#x2F;code&gt;（及 &lt;code&gt;GPTQConfig&lt;&#x2F;code&gt;）和 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt;，为它们加入 GPTQv2 支持。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;diao-zheng-xi-jie-gen-ju-ge-shi-xuan-ze-chu-li-fang-shi&quot;&gt;调整细节：根据格式选择处理方式&lt;&#x2F;h3&gt;
&lt;p&gt;线性方法与内核的调整需要满足三项要求：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;保持与 GPTQv1 格式的兼容性。&lt;&#x2F;li&gt;
&lt;li&gt;尽量减小对代码和二进制大小的影响。&lt;&#x2F;li&gt;
&lt;li&gt;保持现有路由，让 GPTQv2 模型仍可选择 Marlin 等其他内核。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;为满足前两项要求：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;为 &lt;code&gt;GPTQLinearMethod&lt;&#x2F;code&gt; 添加 &lt;code&gt;use_v2_format: bool&lt;&#x2F;code&gt; 属性，用于表示 &lt;code&gt;checkpoint_format == &quot;gptq_v2&quot;&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;为 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt; 添加 &lt;code&gt;bool use_v2_format&lt;&#x2F;code&gt; 参数，以 &lt;code&gt;GPTQLinearMethod.use_v2_format&lt;&#x2F;code&gt; 作为输入。&lt;&#x2F;li&gt;
&lt;li&gt;在 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt; 中，根据 &lt;code&gt;use_v2_format&lt;&#x2F;code&gt; 调整零点处理逻辑。例如：&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#1F2328, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; In `reconstruct_exllama_2bit_kernel`:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; Previous: zeros[i] + 1 (hardcoded for GPTQv1)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.y&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.z&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.w&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; Now: zeros[i] + offset (conditioned on `use_v2_format`)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt;int&lt;&#x2F;span&gt;&lt;span&gt; zero_offset &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt; use_v2_format &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt;?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; :&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.x&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; zero_offset&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.y&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; zero_offset&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.z&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; zero_offset&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;dequant_2bit_16&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;load_int4.w&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; dq&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; size_n&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; zeros&lt;&#x2F;span&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;3&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; zero_offset&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;blockquote&gt;
&lt;p&gt;测试期间，我发现原有的 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt; 即使处理对称量化的 GPTQv1 模型，在 4-bit 下也存在 bug。这超出了该 PR 的范围。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;对于第三项要求，&lt;code&gt;GPTQMarlinLinearMethod&lt;&#x2F;code&gt; 和 &lt;code&gt;GPTQBitBLASLinearMethod&lt;&#x2F;code&gt; 都不作改动：它们已经支持 GPTQv2，只是仅限于 4&#x2F;8-bit 对称量化。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;TODO：补充一些性能基准测试。
我发现 2-bit &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt; 在解码（GeMV）时比预填充（GeMM）时更慢。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;zong-jie&quot;&gt;总结&lt;&#x2F;h2&gt;
&lt;p&gt;这项改动为 vLLM 的 fallback GPTQ 路径加入了 GPTQv2 支持，在保持 GPTQv1 兼容性的同时，覆盖了低比特和非对称配置。&lt;&#x2F;p&gt;
&lt;p&gt;欢迎提问与讨论。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;后续可做的工作：&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;扩展优化内核（Marlin、BitBLAS），使其支持 2&#x2F;3-bit 或非对称量化。&lt;&#x2F;li&gt;
&lt;li&gt;修复 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt; 的 4-bit bug。&lt;&#x2F;li&gt;
&lt;li&gt;提升 &lt;code&gt;gptq_gemm&lt;&#x2F;code&gt; 的解码速度。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;Elias Frantar 等，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2210.17323&quot;&gt;“GPTQ: Accurate Post-Training Quantization for Generative Pre-Trained Transformers”&lt;&#x2F;a&gt;，ICLR，2023。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;Yuhang Li 等，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2504.02692&quot;&gt;“GPTAQ: Efficient Finetuning-Free Quantization for Asymmetric Calibration”&lt;&#x2F;a&gt;，arXiv，2025。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;Daniël de Kok，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;danieldk.eu&#x2F;GPTQ-Checkpoint-Format&quot;&gt;“GPTQ Checkpoint Format”&lt;&#x2F;a&gt;，Daniël’s Website，2024。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
  </entry>
  
  
  <entry xml:lang="zh">
    <title>视觉—语言—动作（VLA）模型：近期进展综述</title>
    <published>2025-09-16T00:00:00+00:00</published>
    <updated>2026-07-12T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/vla-models-review/"/>
    <id>https://xxxxyu.github.io/zh/blog/vla-models-review/</id>
    <summary>近期 VLA 正从离散控制走向连续控制，也从单系统架构转向双系统架构。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/vla-models-review/">&lt;blockquote&gt;
&lt;p&gt;我刚开始接触这个领域，欢迎讨论，也欢迎提出任何问题！ &lt;br &#x2F;&gt;
本文根据我的&lt;a href=&quot;&#x2F;files&#x2F;blog&#x2F;vla-models-review&#x2F;vla-review-0911.pdf&quot;&gt;幻灯片&lt;&#x2F;a&gt;整理而成。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;bei-jing-yu-gai-nian&quot;&gt;背景与概念&lt;&#x2F;h2&gt;
&lt;!-- ### 具身智能的演进 --&gt;
&lt;h3 id=&quot;shi-jue-yu-yan-dong-zuo-vla-mo-xing-de-gai-nian&quot;&gt;视觉—语言—动作（VLA）模型的概念&lt;&#x2F;h3&gt;
&lt;p&gt;在我的理解中，&lt;em&gt;视觉—语言—动作（Vision-Language-Action，VLA）模型&lt;&#x2F;em&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;是面向具身智能的多模态基础模型。它以&lt;strong&gt;视觉&lt;&#x2F;strong&gt;（如视频流中的观测）和&lt;strong&gt;语言&lt;&#x2F;strong&gt;（如用户指令）为输入，输出机器人的底层&lt;strong&gt;动作&lt;&#x2F;strong&gt;（即&lt;em&gt;控制策略&lt;&#x2F;em&gt;）。
VLA 使用&lt;em&gt;视觉—语言模型（VLM）&lt;em&gt;来&lt;&#x2F;em&gt;生成以视觉和语言为条件的动作&lt;&#x2F;em&gt;。&lt;&#x2F;p&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vla-models-review&amp;#x2F;timeline.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;VLA 的概念，以及汇聚到现代 VLA 系统的几条研究脉络。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;h3 id=&quot;wei-chang-cheng-ren-wu-jia-ru-ji-yu-vlm-de-ren-wu-gui-hua-qi&quot;&gt;为长程任务加入基于 VLM 的任务规划器&lt;&#x2F;h3&gt;
&lt;p&gt;早期 VLA 主要关注机器人的底层控制。除非对整个任务进行端到端训练，否则仅靠底层控制不足以完成复杂的长程任务。
一种做法是加入基于 LLM&#x2F;VLM 的&lt;em&gt;任务规划器&lt;&#x2F;em&gt;，把长程任务分解为较简单的子任务，再交给 VLA 依次完成。
较早的工作通常采用独立模型作为任务规划器；近期工作则让任务规划和控制共享同一个 VLM 主干，即采用&lt;em&gt;双系统&lt;&#x2F;em&gt;架构。&lt;&#x2F;p&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vla-models-review&amp;#x2F;hierarchical-policy.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;高层规划器将长程指令分解为多个子任务，再交给底层 VLA 控制策略执行。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;h2 id=&quot;vla-de-jin-qi-jin-zhan&quot;&gt;VLA 的近期进展&lt;&#x2F;h2&gt;
&lt;p&gt;我从两个维度概括 VLA 的近期进展：**从仅有&lt;em&gt;系统 1&lt;&#x2F;em&gt;（控制）走向&lt;em&gt;双系统&lt;&#x2F;em&gt;（规划 + 控制），以及从&lt;em&gt;离散&lt;&#x2F;em&gt;动作走向&lt;em&gt;连续&lt;&#x2F;em&gt;动作。**由此可以得到四个象限：&lt;&#x2F;p&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vla-models-review&amp;#x2F;quadrants.png&quot; alt=&quot;&quot; class=&quot;media-figure__image invertible-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;按动作表示和系统架构划分的近期 VLA。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;p&gt;下面依次介绍这几类方法。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;chi-san-vla&quot;&gt;离散 VLA&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;离散 VLA&lt;&#x2F;em&gt; 生成&lt;em&gt;离散动作 token&lt;&#x2F;em&gt;。它先将机器人的底层动作映射为离散 token，再训练 VLM 像生成文本 token 一样，以&lt;em&gt;自回归&lt;&#x2F;em&gt;方式生成动作 token。
这样，动作和语言便有了统一的表示，也把下一个 token 预测扩展为下一个动作预测。
不过，自回归生成可能带来较高延迟和较低的控制频率，因为每生成一个新的动作 token，都需要再次运行 VLA。&lt;&#x2F;p&gt;
&lt;p&gt;代表性方法包括：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RT-2&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;（ViT + PaLI-X&#x2F;PaLM-E）：首次提出并推广了“VLA”这一术语的开创性工作。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;OpenVLA&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;（DINOv2 &amp;amp; SigLIP + Llama 2 7B）：颇具影响力的开源 VLA 模型（在 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;openvla&#x2F;openvla&quot;&gt;GitHub&lt;&#x2F;a&gt; 上有 3.8k stars）。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;FAST&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;：一种使用 DCT（离散余弦变换）压缩动作序列的动作 tokenizer。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vla-models-review&amp;#x2F;openvla.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;OpenVLA 将机器人动作视为离散 token，由预训练 VLM 以自回归方式生成。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;h3 id=&quot;lian-xu-vla&quot;&gt;连续 VLA&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;em&gt;连续 VLA&lt;&#x2F;em&gt; 从&lt;em&gt;连续动作空间&lt;&#x2F;em&gt;中采样。这样能实现更平滑、精度更高的控制，但也更难在现有语言模型之上训练。
Physical Intelligence 的做法是在预训练 VLM 上加入一个&lt;em&gt;流匹配动作专家&lt;&#x2F;em&gt;，并基于预训练的 PaliGemma 2B VLM 训练 $\pi_0$&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;预训练 VLM 从互联网规模的数据中获得&lt;strong&gt;语义理解和泛化能力&lt;&#x2F;strong&gt;，流匹配动作专家则从跨本体数据中学习&lt;strong&gt;高频（最高 50 Hz）控制&lt;&#x2F;strong&gt;。之后，还可以针对困难任务或未见过的任务对模型进行微调。&lt;&#x2F;p&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vla-models-review&amp;#x2F;pi0.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;π₀ 将预训练 VLM 与流匹配动作专家结合，实现连续控制。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;p&gt;类似地，NVIDIA Isaac 训练了 GR00T N1(.5)&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。它将预训练 Eagle-2 VLM 与基于扩散模型的动作头相结合，作为通用人形机器人的基础模型。在 $\pi_0$ 和 GR00T 中，VLM 主干与动作专家通过注意力模块交互，使生成的动作以 VLM 的隐状态（即 KV）为条件。二者在技术上有两点区别：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;注意力机制&lt;&#x2F;strong&gt;：$\pi_0$ 将视觉—语言部分与动作部分的 KV 拼接起来，再进行掩码自注意力计算（这篇&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;huggingface.co&#x2F;blog&#x2F;pi0&quot;&gt;博文&lt;&#x2F;a&gt;给出了很清楚的图示）；GR00T 则直接在两部分之间进行交叉注意力计算。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;参与计算的 VLM 层数&lt;&#x2F;strong&gt;：$\pi_0$ 让动作专家的层数与 VLM 主干对齐，并在每一层进行自注意力计算（类似 MoE）；GR00T 只保留 VLM 最后一层的隐状态&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，动作专家的每一层都与它进行交叉注意力计算。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;shuang-xi-tong-vla&quot;&gt;双系统 VLA&lt;&#x2F;h3&gt;
&lt;p&gt;与“系统 1 VLA + 独立 LLM&#x2F;VLM 任务规划器”的组合不同，&lt;em&gt;双系统 VLA&lt;&#x2F;em&gt; 还会使用自身的 VLM 主干进行规划。因此，系统 2（高层规划）和系统 1（底层控制）&lt;strong&gt;共享同一个 VLM&lt;&#x2F;strong&gt;。
VLA 学习&lt;strong&gt;直接根据用户指令预测子任务&lt;&#x2F;strong&gt;，由此提升开放世界中的泛化能力，同时比采用独立规划器模型消耗更少的资源。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;问题：共享 VLM 是否能通过对齐系统 1 和系统 2 来提升性能？反过来，两者的目标是否也可能互相干扰？&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;



&lt;figure class=&quot;media-figure&quot;&gt;
  &lt;img src=&quot;&amp;#x2F;img&amp;#x2F;blog&amp;#x2F;vla-models-review&amp;#x2F;pi05.png&quot; alt=&quot;&quot; class=&quot;media-figure__image dimmable-image&quot; loading=&quot;lazy&quot;&gt;
  
  &lt;figcaption class=&quot;media-figure__caption&quot;&gt;π₀.₅ 在 π₀ 的基础上加入高层子任务预测，实现双系统规划与控制。&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;

&lt;p&gt;Physical Intelligence 训练的 $\pi_{0.5}$&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 是这一类别中的首个模型。与 $\pi_0$ 相比，它的训练数据还包括目标检测、指令、子任务命令和离散动作。
推理时，其 VLM 先根据高层提示预测一个子任务（系统 2），随后由 VLM 和动作专家执行该子任务（系统 1）。
近期的 VLA，如 Galaxea 的 G0&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 和 X Square Robot 的 WALL-OSS&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#10&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，都沿用了这一训练方法和推理流程。
这类模型大多采用连续 VLA，但 WALL-OSS 也提供了使用 FAST tokenization 的离散版本（&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;huggingface.co&#x2F;x-square-robot&#x2F;wall-oss-fast&quot;&gt;WALL-OSS-FAST&lt;&#x2F;a&gt;）。&lt;&#x2F;p&gt;
&lt;p&gt;各模型的仓库和开源情况如下：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$\pi_{0.5}$：已公开模型权重，部分代码发布于 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Physical-Intelligence&#x2F;openpi&quot;&gt;Physical-Intelligence&#x2F;openpi&lt;&#x2F;a&gt;，但 VLM 子任务预测的推理代码尚未公开。&lt;&#x2F;li&gt;
&lt;li&gt;G0：已公开模型权重和开放世界数据集，部分代码发布于 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;OpenGalaxea&#x2F;G0&quot;&gt;OpenGalaxea&#x2F;G0&lt;&#x2F;a&gt;，目前仅支持真机推理。&lt;&#x2F;li&gt;
&lt;li&gt;WALL-OSS：模型权重和代码均已发布于 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;X-Square-Robot&#x2F;wall-x&quot;&gt;X-Square-Robot&#x2F;wall-x&lt;&#x2F;a&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;zong-jie-yu-zhan-wang&quot;&gt;总结与展望&lt;&#x2F;h2&gt;
&lt;p&gt;自 RT-2 于 2023 年问世以来，VLA 已迅速从离散控制发展到连续控制，也从单系统架构发展到双系统架构。
我认为，&lt;em&gt;原生多任务&lt;&#x2F;em&gt;会成为下一个趋势：具身智能体不应局限于执行动作，还应能处理聊天、记忆和导航等本质上不同的任务。
近期的模型已经让任务规划和控制共享基于互联网规模数据预训练的 VLM 主干。尽管这两者仍然以动作为中心，但它们为多个更广泛的任务共享同一个 VLM 奠定了基础。&lt;&#x2F;p&gt;
&lt;p&gt;我目前正在研究这种面向具身智能体原生多任务的&lt;em&gt;多专家基础模型&lt;&#x2F;em&gt;，欢迎联系我讨论与合作！&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;Yueen Ma et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2405.14093&quot;&gt;“A Survey on Vision-Language-Action Models for Embodied AI”&lt;&#x2F;a&gt;, arXiv, 2024.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;Brianna Zitkovich et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2307.15818&quot;&gt;“RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control”&lt;&#x2F;a&gt;, CoRL, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;Moo Jin Kim et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2406.09246&quot;&gt;“OpenVLA: An Open-Source Vision-Language-Action Model”&lt;&#x2F;a&gt;, CoRL, 2024.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;4&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;4&lt;&#x2F;sup&gt;
&lt;p&gt;Karl Pertsch et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2501.09747&quot;&gt;“FAST: Efficient Action Tokenization for Vision-Language-Action Models”&lt;&#x2F;a&gt;, RSS, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;5&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;5&lt;&#x2F;sup&gt;
&lt;p&gt;Kevin Black et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2410.24164&quot;&gt;“$\pi_0$: A Vision-Language-Action Flow Model for General Robot Control”&lt;&#x2F;a&gt;, RSS, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;6&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;6&lt;&#x2F;sup&gt;
&lt;p&gt;Johan Bjorck et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2503.14734&quot;&gt;“GR00T N1: An Open Foundation Model for Generalist Humanoid Robots”&lt;&#x2F;a&gt;, arXiv, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;7&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;7&lt;&#x2F;sup&gt;
&lt;p&gt;具体而言，根据我对权重相似度的测试，GR00T N1.5 的 VLM 语言主干由预训练 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;huggingface.co&#x2F;Qwen&#x2F;Qwen3-1.7B&quot;&gt;Qwen3-1.7B&lt;&#x2F;a&gt;（共 28 层）的前 14 层微调而来。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;8&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;8&lt;&#x2F;sup&gt;
&lt;p&gt;Physical Intelligence et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2504.16054&quot;&gt;“$\pi_{0.5}$: A Vision-Language-Action Model with Open-World Generalization”&lt;&#x2F;a&gt;, arXiv, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;9&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;9&lt;&#x2F;sup&gt;
&lt;p&gt;Tao Jiang et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2509.00576&quot;&gt;“Galaxea Open-World Dataset and G0 Dual-System VLA Model”&lt;&#x2F;a&gt;, arXiv, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;10&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;10&lt;&#x2F;sup&gt;
&lt;p&gt;X Square Robot, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;x2robot.cn-wlcb.ufileos.com&#x2F;wall_oss.pdf&quot;&gt;“WALL-OSS: Igniting VLMs toward the Embodied Space”&lt;&#x2F;a&gt;, white paper, 2025.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
  </entry>
  
  
  <entry xml:lang="zh">
    <title>Dario Amodei 博客阅读笔记</title>
    <published>2025-08-02T00:00:00+00:00</published>
    <updated>2026-07-11T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/amodei-blog-reading-notes/"/>
    <id>https://xxxxyu.github.io/zh/blog/amodei-blog-reading-notes/</id>
    <summary>阅读 Dario Amodei 关于强大 AI、可解释性与 AI 政策文章的笔记。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/amodei-blog-reading-notes/">&lt;blockquote&gt;
&lt;p&gt;本文仍在更新，但现有笔记已经可以阅读。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;最近，我读了 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;&quot;&gt;Anthropic&lt;&#x2F;a&gt; CEO &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;&quot;&gt;Dario Amodei&lt;&#x2F;a&gt; 的几篇文章&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。作为一名 AI 博士生，也是 Anthropic Claude 模型的常用用户，我从中获得了不少启发。&lt;&#x2F;p&gt;
&lt;p&gt;这些文章拓宽了我对学术界和产业界的认识，内容也常常横跨多个学科。
这篇笔记记录了我阅读时想到的一些问题。&lt;&#x2F;p&gt;
&lt;p&gt;按我的阅读顺序，涉及的文章包括：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;post&#x2F;on-deepseek-and-export-controls&quot;&gt;&lt;em&gt;On DeepSeek and Export Controls&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;（2025 年 1 月）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;post&#x2F;the-urgency-of-interpretability&quot;&gt;&lt;em&gt;The Urgency of Interpretability&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;（2025 年 4 月）&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;essay&#x2F;machines-of-loving-grace&quot;&gt;&lt;em&gt;Machines of Loving Grace&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;（2024 年 10 月）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;chang-xiang-qiang-da-ai&quot;&gt;畅想强大 AI&lt;&#x2F;h2&gt;
&lt;p&gt;在 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;essay&#x2F;machines-of-loving-grace&quot;&gt;&lt;em&gt;Machines of Loving Grace&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; 中，Amodei 描绘了“强大 AI”（他更偏爱这一说法，而非 &lt;em&gt;AGI&lt;&#x2F;em&gt;）可能具有的形态，以及它问世后 5–10 年间可能给社会带来的变化。他预测，“它最早可能在 2026 年出现”。在我看来，他设想的 AI 在形态上与今天的大语言模型相似，但实现方式未必相同，主要具有以下特点：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;超级智能。&lt;&#x2F;strong&gt; 单论智力，它“比诺贝尔奖得主更聪明”。例如，它能够证明尚未解决的数学定理，也能写出极为出色的小说。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;能够使用各种界面。&lt;&#x2F;strong&gt; 除了聊天，它还可以使用人类完成虚拟工作所需的一切界面。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;自主工作。&lt;&#x2F;strong&gt; 它能够长时间执行分配给它的任务，只在确有必要时向人类询问。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;通过虚拟方式与现实交互。&lt;&#x2F;strong&gt; 它没有实体，但可以借助计算机控制乃至创造现实中的工具。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;规模庞大、速度极快。&lt;&#x2F;strong&gt; 原本用于训练的资源可以转而运行数百万个实例；这些实例学习和行动的速度都远超人类（例如快 10–100 倍）。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;既独立又协作。&lt;&#x2F;strong&gt; 数百万个实例既可以各自处理互不相关的任务，也可以协同解决同一个问题；其中一些实例还可以通过微调，尤其擅长特定任务（我会称之为“专家”）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;他将其概括为“数据中心里的天才之国”：它能迅速解决棘手问题，却依然受到外部世界的制约。这些制约包括物理过程的速度、对数据的需求（例如粒子物理研究）、问题本身的复杂性（例如&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Three-body_problem&quot;&gt;三体问题&lt;&#x2F;a&gt;）、法律与人类意愿，以及晶体管密度和擦除单位信息所需能量的物理极限。&lt;&#x2F;p&gt;
&lt;p&gt;因此，他借用经济学中的“智力边际回报”来思考一个拥有极其强大 AI 的世界。
他的预测建立在这样一个问题之上：更高的智能能在哪些领域发挥作用、作用有多大，又需要多长时间？
我很喜欢这种分析方式。如果没有一种合理的方法衡量智能的影响，我们很容易走向过度乐观或过度悲观。&lt;&#x2F;p&gt;
&lt;p&gt;上面的基本假设和分析框架&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;并不是 &lt;em&gt;Machines of Loving Grace&lt;&#x2F;em&gt; 的主体，却是最打动我的部分。
毕竟，最难的并不是在一个扎实的框架下推导出合理答案，而是提出这个框架本身。&lt;&#x2F;p&gt;
&lt;p&gt;文章余下的篇幅分别从五个领域讨论强大 AI 问世后 5–10 年间可能发生的变化：生物学与健康、神经科学与心智、经济发展与贫困、和平与治理，以及工作与意义。
他的核心预测是：&lt;strong&gt;强大 AI 将把人类 50–100 年的进步压缩到 5–10 年内完成&lt;&#x2F;strong&gt;，他称之为“压缩的 21 世纪”。悬而未决的问题是，这样的 AI 究竟何时才会出现。&lt;&#x2F;p&gt;
&lt;p&gt;与&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;essay&#x2F;machines-of-loving-grace#basic-assumptions-and-framework&quot;&gt;“基本假设和分析框架”&lt;&#x2F;a&gt;一节相比，我觉得有些预测更带有个人色彩，比如关于自由民主与威权主义的讨论&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。
即使采用同一套分析框架，人们也会因为背景和经历不同，对某些问题产生不同的理解与想象。
这正是我喜欢阅读不同背景作者作品的重要原因之一，也是我写下这些笔记的原因。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yong-ji-zhi-ke-jie-shi-xing-bao-zhang-ai-an-quan&quot;&gt;用机制可解释性保障 AI 安全&lt;&#x2F;h2&gt;
&lt;p&gt;随着现代 AI 逐渐接近上文所说的“强大 AI”，治理与“安全”问题会愈发重要（而如何定义安全，本身就是一个重大问题）。
强大的 AI 系统需要技术层面的安全机制，可解释性是其中的重要一环。
在 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;post&#x2F;the-urgency-of-interpretability&quot;&gt;&lt;em&gt;The Urgency of Interpretability&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; 中，Amodei 介绍了机制可解释性的重要性与发展历程，以及 Anthropic 最近在这一方向上的进展。&lt;&#x2F;p&gt;
&lt;p&gt;可解释性之所以重要，是因为现代深度学习系统不同于由明确规则编写的传统系统，在很大程度上仍是“黑箱”。就连开发者也无法完全解释，为什么某个输入会产生某个输出。
Amodei 引用了联合创始人 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;colah.github.io&#x2F;about.html&quot;&gt;Chris Olah&lt;&#x2F;a&gt; 的说法：生成式 AI 系统与其说是被“建造”出来的，不如说是被“培育”出来的（我很喜欢这个词）——它们的内部机制从训练中涌现，并非由人直接设计。
这类系统可能对人们产生越来越大的影响，因此，要让它们得到更广泛的应用，透明度与可解释性不可或缺。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;机制可解释性&lt;&#x2F;em&gt;试图通过逆向工程，理解神经网络在内部学到了哪些算法和计算机制。
它不同于关注输入输出关系或高层行为的方法，而是试图从底层解释各层和神经元中究竟发生了什么。
这一领域早期主要研究 CNN，如今则越来越关注大语言模型。
Anthropic 联合创始人 Chris Olah 从在 Google 和 OpenAI 工作时起，就一直在研究这一领域。&lt;&#x2F;p&gt;
&lt;p&gt;对大语言模型而言，一个早期步骤是找出可解释的神经元&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。研究人员发现，有些神经元的含义一目了然，但大多数神经元表达的却是杂乱混合的词语与概念。这种“叠加”让模型能表达比神经元数量更多的概念。为了将它们分离，研究人员使用&lt;em&gt;稀疏自编码器&lt;&#x2F;em&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;寻找对应于更纯粹、可由人理解的概念的神经元组合，并将这些概念称为“特征”。有些特征非常微妙，例如“不论字面还是比喻意义上的闪烁其词或犹豫不决”。借助这种方法，Anthropic 在 Claude 3 Sonnet 中识别出了超过 3000 万个特征。&lt;&#x2F;p&gt;
&lt;p&gt;有了这些特征，研究人员就可以进一步探查模型的工作方式。人为放大某项特征可以显著改变模型行为（&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;news&#x2F;golden-gate-claude&quot;&gt;“Golden Gate Claude”&lt;&#x2F;a&gt;）；追踪并操纵成组的特征（即“回路”&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;），则有助于解释推理过程的某些部分。
Anthropic 的研究文章&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;更详细地介绍了这项工作。&lt;&#x2F;p&gt;
&lt;p&gt;机制可解释性试图逆向分析神经网络，甚至是拥有数十亿参数的大语言模型，并为模型内部的工作方式提供具体证据；我很欣赏这一点。
这个方向看起来很有前景，但我不认为在庞大的神经网络里寻找“漏洞”，就是通往强大且安全的 AI 的完整路径——那就像在一头蓝鲸体内清除癌细胞一样。
至少目前，我不觉得我们的模型已经强大到足以构成“危险”，不过机制可解释性也可以帮助提升模型能力。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ai-yu-zheng-zhi&quot;&gt;AI 与政治&lt;&#x2F;h2&gt;
&lt;p&gt;这一节尚待完成（这个话题也实在太大）——等有时间时我会补上。&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;我最初读到的是一篇介绍 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;post&#x2F;on-deepseek-and-export-controls&quot;&gt;&lt;em&gt;On DeepSeek and Export Controls&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; 的中文文章，之后又阅读了英文原文，以及 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;&quot;&gt;Amodei 个人网站&lt;&#x2F;a&gt;上的其他文章。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;这些内容整理自原文的&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;essay&#x2F;machines-of-loving-grace#basic-assumptions-and-framework&quot;&gt;“基本假设和分析框架”&lt;&#x2F;a&gt;一节。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;引自 Amodei &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.darioamodei.com&#x2F;essay&#x2F;machines-of-loving-grace#4-peace-and-governance&quot;&gt;&lt;em&gt;Peace and governance&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; 一节的首段：“二十年前，美国政策制定者认为，与中国开展自由贸易会使中国在富裕起来的同时走向自由化；事实远非如此，如今我们似乎正与一个复兴的威权阵营走向第二次冷战。”&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;4&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;4&lt;&#x2F;sup&gt;
&lt;p&gt;Nelson Elhage 等，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;transformer-circuits.pub&#x2F;2022&#x2F;solu&#x2F;index.html&quot;&gt;“Softmax Linear Units”&lt;&#x2F;a&gt;，&lt;em&gt;Transformer Circuits Thread&lt;&#x2F;em&gt;，2022。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;5&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;5&lt;&#x2F;sup&gt;
&lt;p&gt;Trenton Bricken 等，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;transformer-circuits.pub&#x2F;2023&#x2F;monosemantic-features&quot;&gt;“Towards Monosemanticity: Decomposing Language Models With Dictionary Learning”&lt;&#x2F;a&gt;，&lt;em&gt;Transformer Circuits Thread&lt;&#x2F;em&gt;，2023。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;6&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;6&lt;&#x2F;sup&gt;
&lt;p&gt;Jack Lindsey 等，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;transformer-circuits.pub&#x2F;2025&#x2F;attribution-graphs&#x2F;biology.html&quot;&gt;“On the Biology of a Large Language Model”&lt;&#x2F;a&gt;，&lt;em&gt;Transformer Circuits Thread&lt;&#x2F;em&gt;，2025。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;7&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;7&lt;&#x2F;sup&gt;
&lt;p&gt;Anthropic，&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;research&#x2F;mapping-mind-language-model&quot;&gt;&lt;em&gt;Mapping the Mind of a Large Language Model&lt;&#x2F;em&gt;&lt;&#x2F;a&gt; 和 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.anthropic.com&#x2F;research&#x2F;tracing-thoughts-language-model&quot;&gt;&lt;em&gt;Tracing the Thoughts of a Large Language Model&lt;&#x2F;em&gt;&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
  </entry>
  
  
  <entry xml:lang="zh">
    <title>Android 智能手机配置速查表</title>
    <published>2025-01-09T00:00:00+00:00</published>
    <updated>2026-07-11T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/smartphone-setup-cheatsheet/"/>
    <id>https://xxxxyu.github.io/zh/blog/smartphone-setup-cheatsheet/</id>
    <summary>面向开发工作的 Android 智能手机配置实用检查清单。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/smartphone-setup-cheatsheet/">&lt;p&gt;这份速查表源于我自己的开发需求，主要面向 AI 计算任务，以及在类 Linux 环境中运行 DNN。如果你更关心应用开发和 GUI 调试，它可能并不适用。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shou-ci-kai-ji&quot;&gt;首次开机&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;zhu-ce&quot;&gt;注册&lt;&#x2F;h3&gt;
&lt;p&gt;注册新设备以激活保修（如果你不打算获取系统 root 权限）。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;huo-qu-xi-tong-root-quan-xian&quot;&gt;获取系统 Root 权限&lt;&#x2F;h2&gt;
&lt;p&gt;如需以超级用户身份深度控制系统，必须取得 root 权限。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;magiskcn.com&quot;&gt;Magisk 中文网教程&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;本节以一加设备为例，因为在国内，一加对 root 相对友好。&lt;&#x2F;p&gt;
&lt;p&gt;所需工具与文件：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;ADB（Android Debug Bridge）：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;developer.android.com&#x2F;tools&#x2F;releases&#x2F;platform-tools&quot;&gt;platform-tools&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Android OTA payload 提取工具：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ssut&#x2F;payload-dumper-go&quot;&gt;payload-dumper-go&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;系统 ROM：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;magiskcn.com&#x2F;roms.html&quot;&gt;MagiskCN&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Magisk APK：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;topjohnwu&#x2F;Magisk&#x2F;releases&quot;&gt;GitHub Release&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;jie-suo-bootloader&quot;&gt;解锁 Bootloader&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;magiskcn.com&#x2F;oneplus-unlock-qualcomm#google_vignette&quot;&gt;Magisk 中文网教程&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;进入开发者模式&lt;&#x2F;li&gt;
&lt;li&gt;开启 OEM 解锁（具体方式取决于厂商）&lt;&#x2F;li&gt;
&lt;li&gt;开启 USB 调试，将手机连接至主机&lt;&#x2F;li&gt;
&lt;li&gt;进入 bootloader：&lt;code&gt;adb reboot bootloader&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;解锁 bootloader：&lt;code&gt;fastboot flashing unlock&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;在手机上选择“解锁 bootloader”并确认&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;shi-yong-magisk-huo-qu-root-quan-xian&quot;&gt;使用 Magisk 获取 Root 权限&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;magiskcn.com&#x2F;oneplus-init-boot&quot;&gt;Magisk 中文网教程&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;在主机上下载匹配的 ROM 包并解压&lt;&#x2F;li&gt;
&lt;li&gt;使用 payload 提取工具从 ROM 中提取 &lt;code&gt;init_boot.img&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;用法：&lt;code&gt;payload-dumper-go -p init_boot &amp;lt;extracted&amp;gt;&#x2F;payload.bin&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;开启 USB 调试，将手机连接至主机&lt;&#x2F;li&gt;
&lt;li&gt;将 &lt;code&gt;init_boot.img&lt;&#x2F;code&gt; 传到手机的“Download”文件夹&lt;&#x2F;li&gt;
&lt;li&gt;在手机上安装 Magisk 应用&lt;&#x2F;li&gt;
&lt;li&gt;在 Magisk 中选择“安装”，修补 &lt;code&gt;init_boot.img&lt;&#x2F;code&gt;，得到 &lt;code&gt;magisk_patched-xxx.img&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;将 &lt;code&gt;magisk_patched-xxx.img&lt;&#x2F;code&gt; 传回主机&lt;&#x2F;li&gt;
&lt;li&gt;进入 bootloader：&lt;code&gt;adb reboot bootloader&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;刷入补丁：&lt;code&gt;fastboot flash init_boot magisk_patched-xxx.img&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;成功时应看到“Okay”&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;重启系统：&lt;code&gt;fastboot reboot&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;重启后打开 Magisk，查看其中显示的版本信息，确认 root 权限已获取成功。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xi-tong-she-zhi&quot;&gt;系统设置&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;kai-fa-zhe-xuan-xiang&quot;&gt;开发者选项&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;开启开发者选项&lt;&#x2F;li&gt;
&lt;li&gt;开启 USB 调试&lt;&#x2F;li&gt;
&lt;li&gt;开启无线调试（如有需要）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;xi-tong-geng-xin&quot;&gt;系统更新&lt;&#x2F;h3&gt;
&lt;p&gt;建议关闭所有可能影响系统性能与版本稳定性的设置，具体包括：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;关闭不必要的后台服务&lt;&#x2F;li&gt;
&lt;li&gt;关闭系统自动更新与自动下载&lt;&#x2F;li&gt;
&lt;li&gt;移除自动安装的应用&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;dian-chi-guan-li&quot;&gt;电池管理&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;在系统全局电池设置中开启“性能模式”&lt;&#x2F;li&gt;
&lt;li&gt;在各应用的电池设置中开启“允许后台运行”&lt;&#x2F;li&gt;
&lt;li&gt;为 Termux 及类似进程选择“获取唤醒锁”&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ying-yong&quot;&gt;应用&lt;&#x2F;h2&gt;
&lt;p&gt;安装方式：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;从应用商店安装（Google Play、F-Droid 等）&lt;&#x2F;li&gt;
&lt;li&gt;安装已下载的 APK（Android Application Package）&lt;&#x2F;li&gt;
&lt;li&gt;通过 ADB 从主机安装（需要 APK）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;clash-for-android-cfa&quot;&gt;Clash for Android（CFA）&lt;&#x2F;h3&gt;
&lt;p&gt;首先配置代理。&lt;&#x2F;p&gt;
&lt;p&gt;TODO：补充细节&lt;&#x2F;p&gt;
&lt;h3 id=&quot;f-droid&quot;&gt;F-Droid&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;f-droid.org&#x2F;&quot;&gt;F-Droid&lt;&#x2F;a&gt; 是一个可安装的 Android FOSS（自由及开放源代码软件）应用目录，也可作为 Google Play 的替代方案。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;termux&quot;&gt;Termux&lt;&#x2F;h3&gt;
&lt;p&gt;推荐通过 F-Droid 安装。&lt;&#x2F;p&gt;
&lt;p&gt;另请参阅 &lt;a href=&quot;&#x2F;zh&#x2F;blog&#x2F;termux-setup-cheatsheet&#x2F;&quot;&gt;Termux 配置速查表&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;microsoft-edge&quot;&gt;Microsoft Edge&lt;&#x2F;h3&gt;
&lt;p&gt;可用它替代功能可能受限的系统浏览器。&lt;&#x2F;p&gt;
&lt;p&gt;我推荐 Edge，是因为国内各大应用商店通常都能下载到它。&lt;&#x2F;p&gt;
</content>
  </entry>
  
  
  <entry xml:lang="zh">
    <title>Android 手机上 Termux 配置速查表</title>
    <published>2025-01-09T00:00:00+00:00</published>
    <updated>2026-07-11T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/termux-setup-cheatsheet/"/>
    <id>https://xxxxyu.github.io/zh/blog/termux-setup-cheatsheet/</id>
    <summary>将 Termux 配置为 Android 开发环境的实用检查清单。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/termux-setup-cheatsheet/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;termux.dev&#x2F;en&#x2F;&quot;&gt;Termux&lt;&#x2F;a&gt; 在 Android 上提供了一个类 Linux 环境，功能比 ADB shell 完整得多。作为&lt;a href=&quot;&#x2F;zh&#x2F;blog&#x2F;smartphone-setup-cheatsheet&#x2F;&quot;&gt;智能手机配置速查表&lt;&#x2F;a&gt;的延伸，本文说明如何配置 Termux。&lt;&#x2F;p&gt;
&lt;p&gt;这套配置服务于我以 AI 计算任务为主的开发需求。如果你主要关注应用开发和 GUI 调试，它可能并不完全适合。&lt;&#x2F;p&gt;
&lt;p&gt;相关参考：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sanwebinfo&#x2F;my-termux-setup&quot;&gt;sanwebinfo&#x2F;my-termux-setup&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;an-zhuang&quot;&gt;安装&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;推荐从 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;f-droid.org&#x2F;&quot;&gt;F-Droid&lt;&#x2F;a&gt; 安装，便于使用插件
&lt;ul&gt;
&lt;li&gt;Termux: Style&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;也可以直接安装 APK；下载见 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;termux&#x2F;termux-app&#x2F;releases&quot;&gt;GitHub Releases&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xi-tong-pei-zhi&quot;&gt;系统配置&lt;&#x2F;h2&gt;
&lt;p&gt;以下是在 Termux 内进行的系统级配置。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;geng-xin-ruan-jian-bao&quot;&gt;更新软件包&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;自动选择镜像：&lt;code&gt;termux-change-repo&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;更新并升级：&lt;code&gt;pkg update &amp;amp;&amp;amp; pkg upgrade&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;pei-zhi-ssh&quot;&gt;配置 SSH&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;安装 OpenSSH：&lt;code&gt;pkg install openssh&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;查看 Termux 用户名：&lt;code&gt;whoami&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;设置登录密码：&lt;code&gt;passwd&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;获取 IP 地址：&lt;code&gt;ifconfig&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;启动 SSH 服务：&lt;code&gt;sshd&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;从远端连接：&lt;code&gt;ssh -p 8022 &amp;lt;username&amp;gt;@&amp;lt;ip&amp;gt;&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;Termux 的默认 SSH 端口是 8022&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;an-zhuang-chang-yong-ruan-jian-bao&quot;&gt;安装常用软件包&lt;&#x2F;h3&gt;
&lt;p&gt;系统配置常用的软件包：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Tsu（Termux 的 su 封装）：&lt;code&gt;pkg install tsu&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Git：&lt;code&gt;pkg install git&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Wget：&lt;code&gt;pkg install wget&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;cURL：&lt;code&gt;pkg install curl&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;CMake：&lt;code&gt;pkg install cmake&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;tmux：&lt;code&gt;pkg install tmux&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;htop：&lt;code&gt;pkg install htop&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;kai-fa-huan-jing-pei-zhi&quot;&gt;开发环境配置&lt;&#x2F;h2&gt;
&lt;p&gt;配置开发所需的环境。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;code&quot;&gt;Code&lt;&#x2F;h3&gt;
&lt;p&gt;Termux 不支持 Visual Studio Code remote server，但开源的 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;coder&#x2F;code-server&quot;&gt;code-server&lt;&#x2F;a&gt; 是一个实用的替代方案。&lt;&#x2F;p&gt;
&lt;p&gt;通过 TUR 仓库安装 code-server：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#1F2328, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;pkg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; tur-repo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;pkg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; code-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在 &lt;code&gt;~&#x2F;.config&#x2F;code-server&#x2F;config.yaml&lt;&#x2F;code&gt; 中配置服务。例如：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#1F2328, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot;&gt;&lt;code data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#116329, #7EE787);&quot;&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#116329, #7EE787);&quot;&gt;ind-addr&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;.0.0.0:8080&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#116329, #7EE787);&quot;&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#116329, #7EE787);&quot;&gt;uth&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;assword&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;启动服务：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#1F2328, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;code-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;现在可以通过 &lt;code&gt;http:&#x2F;&#x2F;&amp;lt;ip&amp;gt;:8080&lt;&#x2F;code&gt; 访问代码编辑界面，并使用配置的密码登录。&lt;&#x2F;p&gt;
&lt;p&gt;如果在 &lt;code&gt;tsu&lt;&#x2F;code&gt; 模式下运行，配置文件路径会略有不同（位于 &lt;code&gt;~&#x2F;.tsu&lt;&#x2F;code&gt; 下）。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;python&quot;&gt;Python&lt;&#x2F;h3&gt;
&lt;p&gt;Termux 不支持 Miniconda。&lt;&#x2F;p&gt;
&lt;p&gt;安装 Python：&lt;code&gt;pkg install python&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  
  
  <entry xml:lang="zh">
    <title>Pi 设备配置速查表</title>
    <published>2025-01-03T00:00:00+00:00</published>
    <updated>2026-07-11T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/pi-setup-cheatsheet/"/>
    <id>https://xxxxyu.github.io/zh/blog/pi-setup-cheatsheet/</id>
    <summary>适用于 Raspberry Pi 及类似单板计算机的实用配置清单。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/pi-setup-cheatsheet/">&lt;p&gt;这份速查表是根据我自己的开发需求整理的，主要适用于 Orange Pi、Raspberry Pi 等开发板。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ying-jian&quot;&gt;硬件&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;wang-luo-lian-jie&quot;&gt;网络连接&lt;&#x2F;h3&gt;
&lt;p&gt;有线或无线网络均可。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;jian-pan-shu-biao-he-xian-shi-qi&quot;&gt;键盘、鼠标和显示器&lt;&#x2F;h3&gt;
&lt;p&gt;用于首次开机配置和本地调试。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;yi-xie-ru-cao-zuo-xi-tong-de-tf-microsd-qia&quot;&gt;已写入操作系统的 TF（MicroSD）卡&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;常规开发推荐使用最新的 Ubuntu LTS
&lt;ul&gt;
&lt;li&gt;我更倾向于使用服务器版系统，因为它比桌面镜像更轻量&lt;&#x2F;li&gt;
&lt;li&gt;同时也能避免 GUI 干扰性能测量&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;预算允许的话，建议使用容量较大的存储卡（我使用的是 ≥256 GB）
&lt;ul&gt;
&lt;li&gt;默认的 32&#x2F;64 GB 对许多任务而言并不够用&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;镜像写入工具：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;etcher.balena.io&#x2F;#download-etcher&quot;&gt;BalenaEtcher&lt;&#x2F;a&gt;（通用）和 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.raspberrypi.com&#x2F;software&#x2F;&quot;&gt;Raspberry Pi Imager&lt;&#x2F;a&gt;（Raspberry Pi）
&lt;ul&gt;
&lt;li&gt;Raspberry Pi Imager 支持通过自定义配置完成无头安装&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xi-tong&quot;&gt;系统&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;an-xu-she-zhi-huo-xiu-gai-yong-hu-ming-he-mi-ma&quot;&gt;按需设置或修改用户名和密码&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;推荐格式：设备名（&lt;code&gt;raspi&lt;&#x2F;code&gt;、&lt;code&gt;orangepi&lt;&#x2F;code&gt;）[+ 用户信息，适用于设备不共用的情况]&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;lian-jie-wu-xian-wang-luo&quot;&gt;连接（无线）网络&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi 在无头安装时可以自动连接网络
&lt;ul&gt;
&lt;li&gt;默认由 &lt;code&gt;cloud-init&lt;&#x2F;code&gt;、&lt;code&gt;netplan&lt;&#x2F;code&gt; 和 &lt;code&gt;networkd&lt;&#x2F;code&gt; 管理网络&lt;&#x2F;li&gt;
&lt;li&gt;我改用了自己更熟悉的 &lt;code&gt;NetworkManager&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;其他运行 Ubuntu 的开发板可以使用 &lt;code&gt;NetworkManager&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;扫描可用网络：&lt;code&gt;nmcli dev wifi&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;通过 SSID 连接：&lt;code&gt;nmcli dev wifi connect &amp;lt;ssid&amp;gt; password &amp;lt;passwd&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;an-xu-pei-zhi-wang-luo&quot;&gt;按需配置网络&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;清华大学 TUNET 认证：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;z4yx&#x2F;GoAuthing&#x2F;&quot;&gt;GoAuthing&lt;&#x2F;a&gt;
&lt;ul&gt;
&lt;li&gt;如果代理导致无法访问 GitHub，也可以从 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mirrors.tuna.tsinghua.edu.cn&#x2F;github-release&#x2F;z4yx&#x2F;GoAuthing&#x2F;LatestRelease&#x2F;&quot;&gt;TUNA&lt;&#x2F;a&gt; 获取发布版本&lt;&#x2F;li&gt;
&lt;li&gt;预编译的 Linux ARM64 可执行文件：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mirrors.tuna.tsinghua.edu.cn&#x2F;github-release&#x2F;z4yx&#x2F;GoAuthing&#x2F;LatestRelease&#x2F;auth-thu.linux.arm64&quot;&gt;auth-thu.linux.arm64&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;配置代理：TODO
&lt;ul&gt;
&lt;li&gt;使用公共网络时，不要允许来自局域网的连接&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;an-zhuang-huo-geng-xin-bi-yao-de-ruan-jian-bao&quot;&gt;安装或更新必要的软件包&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;必要时更换软件源&lt;&#x2F;li&gt;
&lt;li&gt;首先更新软件包列表并升级：&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;pei-zhi-ssh-fu-wu-yi-bian-yuan-cheng-fang-wen&quot;&gt;配置 SSH 服务以便远程访问&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;sshd&lt;&#x2F;code&gt; 启动 SSH 服务&lt;&#x2F;li&gt;
&lt;li&gt;使用 &lt;code&gt;ifconfig&lt;&#x2F;code&gt; 查看设备 IP&lt;&#x2F;li&gt;
&lt;li&gt;使用 &lt;code&gt;ssh -p &amp;lt;port&amp;gt; user@ip&lt;&#x2F;code&gt; 测试登录&lt;&#x2F;li&gt;
&lt;li&gt;使用 &lt;code&gt;ssh-copy-id&lt;&#x2F;code&gt; 配置密钥认证&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;qi-ta&quot;&gt;其他&lt;&#x2F;h3&gt;
&lt;p&gt;（可选）使用厂商提供的工具进行更直观的交互式配置，例如 Raspberry Pi 的 &lt;code&gt;raspi-config&lt;&#x2F;code&gt; 和 Orange Pi 的 &lt;code&gt;orangepi-config&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kai-fa-huan-jing&quot;&gt;开发环境&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;ji-chu-gong-ju-he-ruan-jian-bao&quot;&gt;基础工具和软件包&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;tmux：&lt;code&gt;sudo apt install tmux&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;git：&lt;code&gt;sudo apt install git&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;将 SSH 公钥添加到 GitHub，以便通过 SSH 克隆仓库&lt;&#x2F;li&gt;
&lt;li&gt;提交代码前配置用户名和邮箱&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;code-server（适用于平台不支持 VS Code Remote 的情况）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;gou-jian-gong-ju-he-bian-yi-qi&quot;&gt;构建工具和编译器&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;CMake（大多数项目要求 &amp;gt;=3.22）
&lt;ul&gt;
&lt;li&gt;通过 apt 安装：&lt;code&gt;sudo apt install cmake&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;从官方网站安装：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;cmake.org&#x2F;download&#x2F;&quot;&gt;下载页面&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;更新至最新版：&lt;a href=&quot;https:&#x2F;&#x2F;xxxxyu.github.io&#x2F;zh&#x2F;blog&#x2F;pi-setup-cheatsheet&#x2F;#geng-xin-cmake&quot;&gt;更新 CMake&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;GCC
&lt;ul&gt;
&lt;li&gt;通过 apt 安装：&lt;code&gt;sudo apt install build-essential&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;LLVM + Clang
&lt;ul&gt;
&lt;li&gt;从官方网站安装：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;apt.llvm.org&#x2F;&quot;&gt;下载页面&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;一行命令安装最新版：&lt;code&gt;bash -c &quot;$(wget -O - https:&#x2F;&#x2F;apt.llvm.org&#x2F;llvm.sh)&quot;&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;注意：如果系统中同时装有多个编译器（GCC、Clang 或同一编译器的不同版本），请确认环境变量 &lt;code&gt;$CC&lt;&#x2F;code&gt; 和 &lt;code&gt;$CXX&lt;&#x2F;code&gt; 设置正确，否则 CMake 等构建工具可能会选错编译器。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;python-huan-jing&quot;&gt;Python 环境&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Miniconda
&lt;ul&gt;
&lt;li&gt;大多数情况下的首选方案&lt;&#x2F;li&gt;
&lt;li&gt;一行命令安装（注意操作系统和架构）
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;curl -O https:&#x2F;&#x2F;repo.anaconda.com&#x2F;miniconda&#x2F;Miniconda3-latest-Linux-aarch64.sh&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;bash ~&#x2F;Miniconda3-latest-Linux-aarch64.sh&lt;&#x2F;code&gt;
&lt;ul&gt;
&lt;li&gt;不要使用 &lt;code&gt;sudo&lt;&#x2F;code&gt;，否则 Miniconda 会安装到其他位置&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;阅读协议后按 Enter，并输入 yes&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Virtualenv
&lt;ul&gt;
&lt;li&gt;在项目有要求时使用&lt;&#x2F;li&gt;
&lt;li&gt;通过 apt 安装：&lt;code&gt;sudo apt install python3-venv&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;注意：如果同时安装了 conda 和 virtualenv，请确认激活了正确的环境（从终端里看，两者可能没有明显区别）&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;rong-qi&quot;&gt;容器&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Docker：TODO&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;kuai-su-xiu-fu&quot;&gt;快速修复&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;geng-xin-cmake&quot;&gt;更新 CMake&lt;&#x2F;h3&gt;
&lt;p&gt;在 Ubuntu 上安装最新版 CMake（由 Claude 生成）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#1F2328, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; remove&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;-purge&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; cmake&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; purge&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; cmake&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; autoremove&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;wget&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;O&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; https:&#x2F;&#x2F;apt.kitware.com&#x2F;keys&#x2F;kitware-archive-latest.asc&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; gpg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;-dearmor&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt; sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; tee&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; &#x2F;etc&#x2F;apt&#x2F;trusted.gpg.d&#x2F;kitware.gpg&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&#x2F;dev&#x2F;null&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; add-apt-repository&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;deb https:&#x2F;&#x2F;apt.kitware.com&#x2F;ubuntu&#x2F; &lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;$(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;lsb_release&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;cs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; main&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; apt&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; cmake&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;bian-yi-qi&quot;&gt;编译器&lt;&#x2F;h3&gt;
&lt;p&gt;安装最新版标准库：&lt;code&gt;sudo apt install libstdc++-12-dev&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;git-ke-long&quot;&gt;Git 克隆&lt;&#x2F;h3&gt;
&lt;p&gt;使用 SSH URL 的一行命令：&lt;code&gt;sed -i &#x27;s&#x2F;https:\&#x2F;\&#x2F;github.com\&#x2F;&#x2F;git@github.com:&#x2F;&#x27; .gitmodules&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;递归处理脚本：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#1F2328, #E6EDF3); background-color: light-dark(#FFFFFF, #0D1117);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; Function to update .gitmodules and sync&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;update_modules&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;    sed&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;s&#x2F;https:\&#x2F;\&#x2F;github.com\&#x2F;&#x2F;git@github.com:&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; .gitmodules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;    git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; submodule&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; sync&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;    git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; submodule&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; update&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;-init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; Function to process each level&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#8250DF, #D2A8FF);&quot;&gt;process_level&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; 1. Update current .gitmodules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;    update_modules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; 2. For each currently cloned submodule&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;    git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; submodule&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; foreach&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; &amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;        # 3. Update their .gitmodules if exists&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;        if [ -f &amp;quot;.gitmodules&amp;quot; ]; then&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;            sed -i &amp;quot;s&#x2F;https:\&#x2F;\&#x2F;github.com\&#x2F;&#x2F;git@github.com:&#x2F;&amp;quot; .gitmodules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;            # 4. Update their immediate submodules&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;            git submodule sync&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;            git submodule update --init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;        fi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;    &amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6E7781, #8B949E);&quot;&gt; 5. Repeat multiple times to ensure all nested levels are processed&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;1..5}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt; do&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#0550AE, #79C0FF);&quot;&gt;    echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;Processing level &lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span&gt;i&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#0A3069, #A5D6FF);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#953800, #FFA657);&quot;&gt;    process_level&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CF222E, #FF7B72);&quot;&gt;done&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;hugging-face&quot;&gt;Hugging Face&lt;&#x2F;h3&gt;
&lt;p&gt;HF 镜像：&lt;code&gt;export HF_ENDPOINT=https:&#x2F;&#x2F;hf-mirror.com&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;ModelScope：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.modelscope.cn&#x2F;home&quot;&gt;modelscope.cn&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
  </entry>
  
  
  <entry xml:lang="zh">
    <title>&quot;口袋里的 GPT&quot;，离我们还有多远？</title>
    <published>2023-11-21T00:00:00+00:00</published>
    <updated>2026-07-12T00:00:00+00:00</updated>
    <author><name>Xiangyu Li</name></author>
    <link rel="alternate" type="text/html" href="https://xxxxyu.github.io/zh/blog/gpt-in-your-pocket-weekly/"/>
    <id>https://xxxxyu.github.io/zh/blog/gpt-in-your-pocket-weekly/</id>
    <summary>唠一唠端侧大模型部署那些事。</summary>
    <content type="html" xml:base="https://xxxxyu.github.io/zh/blog/gpt-in-your-pocket-weekly/">&lt;blockquote&gt;
&lt;p&gt;微信公众号版本：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mp.weixin.qq.com&#x2F;s&#x2F;3aPCYBfXCftxF6HtB4e2hw&quot;&gt;「口袋里的 GPT」，离我们还有多远？&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;chu-shi-gpt&quot;&gt;初识 GPT&lt;&#x2F;h2&gt;
&lt;p&gt;2022 年 11 月 30 日，OpenAI 正式发布 ChatGPT。&lt;&#x2F;p&gt;
&lt;p&gt;2022 年 12 月 5 日，ChatGPT 发布仅 5 天便突破 100 万用户。&lt;&#x2F;p&gt;
&lt;p&gt;在国内，ChatGPT 首先在 2022 年 12 月于科技圈引起关注；而时间来到 2023 年 2 月，ChatGPT 更是在国内彻底爆火出圈，一时间风头无两。最近一段时间，Humane 和 GPTs 等又再度引起了大家的关注。在 2023 年，你从不关心 AI 的父母也要问问你：&lt;strong&gt;“GPT“是什么？&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;GPT 全称为 &lt;strong&gt;Generative Pre-Trained Transformer&lt;&#x2F;strong&gt;，即生成式预训练 Transformer 模型。具体来说，Transformer 是最早于 2017 年提出的一种基于 Attention 的神经网络架构&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#1&quot;&gt;1&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;，而 GPT 则是由 OpenAI 基于此架构开发的一系列经过大规模文本预训练、可以生成自然语言文本的模型。当下备受关注的“大模型“，主要就是指以 GPT 为代表的这类基于 Transformer 架构的大规模生成式模型。&lt;&#x2F;p&gt;
&lt;p&gt;最近一年来，除了 GPT 外，新的大模型如雨后春笋一般发布，例如 Meta 开源的 LLaMA 以及基于 LLaMA 的诸多模型。这些模型整体上仍沿用类似于 GPT 的架构，但在模型超参数、训练数据、训练方法等方面各有不同。除了“大模型“这个称谓外，大语言模型（Large Language Model, LLM）和基础模型（Foundation Model, FM）等通常也是指它们，只是各有侧重。为了简便，本文中统称为&lt;strong&gt;大模型&lt;&#x2F;strong&gt;或 &lt;strong&gt;LLM&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kou-dai-li-de-gpt&quot;&gt;口袋里的 GPT&lt;&#x2F;h3&gt;
&lt;p&gt;现阶段的大模型在对话、写作、编程等任务上已经表现出接近甚至超越人类的水平。这让很多人觉得我们距离通用人工智能（Artificial General Intelligence, AGI）又近了一步，大模型也的确展现出了改变现有生产方式的可能性。人们的想象力在此时无限延展，以往只出现在科幻作品中的场景似乎也近在咫尺，颇有“未来已来“之感。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;让每个人都拥有一个定制的大模型，并让它成为随身携带的私人助理&lt;&#x2F;strong&gt;，就是其中颇具吸引力的一个想法——它也许是你口袋中的一个智能终端，也许是眼镜等可穿戴设备，亦或是任何更酷的形式。这个“&lt;strong&gt;口袋里的 GPT&lt;&#x2F;strong&gt;“可以帮你处理文书、安排日程，甚至代替你与他人（或他们的智能助理）交互。&lt;&#x2F;p&gt;
&lt;p&gt;然而现实与理想之间却总是存在差距。除了当前模型、算法上的差距外，&lt;strong&gt;隐私安全与网络延迟&lt;&#x2F;strong&gt;也是极为重要的因素。一个高度定制化、深度参与用户日常生活的智能助理，必然需要处理大量的用户隐私数据，而使用部署在云端的大模型服务则给个人隐私安全带来了严重的隐患。同时，未来海量用户产生的大量推理请求也会对网络传输带来更大的压力，难以满足某些高实时性应用的要求。&lt;strong&gt;在端侧直接部署大模型，一方面便于解决上述问题，另一方面也将面临独特的挑战。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;da-mo-xing-duan-ce-bu-shu-de-tiao-zhan&quot;&gt;大模型端侧部署的挑战&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;zi-yuan-shou-xian&quot;&gt;资源受限&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;在端侧部署大模型的首要挑战，就是设备上有限的硬件资源难以满足大模型的需求。&lt;&#x2F;strong&gt; 大模型出色的能力是建立在其庞大参数量的基础上的。例如，视觉领域经典的 CNN 模型 ResNet 参数量大致在 10M–60M 之间，而 GPT-3 的参数量达到 175B，比前者大 3–4 个数量级。于是，仅仅加载模型权重所需的内存就从 100 MB 上下飙升至几百 GB，更不要提计算中间数据的保存了。&lt;&#x2F;p&gt;
&lt;p&gt;即便是像 LLaMA 7B 这样更适合部署在端侧的“小模型“，也比以 MobileNet 系列为代表的轻量级 CNN 参数量大 3 个数量级。如果以半精度浮点数估计，需要至少 14 GB 内存才能勉强放下全部模型参数，而这已经远超市面上许多中端设备的内存容量。除了前向推理之外，如果希望根据用户数据在本地对模型进行微调训练，则会对内存与算力提出更高要求。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ji-suan-di-xiao&quot;&gt;计算低效&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;strong&gt;端侧大模型的部署以推理为主，而大模型本身的推理效率，是其在端侧部署的另一个重要挑战。&lt;&#x2F;strong&gt; 即便我们设法压缩模型并提供匹配的硬件资源，解决了&lt;strong&gt;可行性&lt;&#x2F;strong&gt;问题，仍然还需要解决大模型运行的&lt;strong&gt;延迟和功耗&lt;&#x2F;strong&gt;带来的&lt;strong&gt;实用性&lt;&#x2F;strong&gt;问题——我们当然不希望数字小秘书以秒为单位龟速输出，同时还热得烫手（&amp;gt; &amp;lt;）。而当前大模型推理低效的一个主要原因，在于其&lt;strong&gt;计算-访存比低，无法充分利用计算资源&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;所谓的计算-访存比，也就是系统领域著名的 &lt;strong&gt;Roofline Model&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#2&quot;&gt;2&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 中的 Operational Intensity（计算强度）。它定义为每访问 1 byte 内存平均需要完成的计算操作次数。对于给定的硬件平台，目标任务的计算-访存比越低，计算单元每完成一次计算平均需要访问的内存也就越多。当硬件的内存带宽被占满时，即便再减少计算量或提供更多算力，也无法带来实际的性能提升。这时称系统受内存带宽限制（memory-bound）；反之则受计算能力限制（compute-bound）。&lt;strong&gt;典型的端侧大模型生成任务往往受内存带宽限制。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;端侧大模型推理的计算-访存比低，是由其工作负载的特点决定的。&lt;&#x2F;strong&gt; 由于硬件资源和应用场景的限制，端侧大模型通常不会处理高并发的请求，且大部分时候仅有一个请求，即 batch size = 1。同时，模型处理的文本长度也较为有限。于是在生成阶段，模型中的计算主要是矩阵向量乘和“高瘦“的矩阵乘，其模型权重每次加载后参与计算的次数较少，于是权重加载（内存访问）就成为了系统的瓶颈。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xian-you-fang-fa&quot;&gt;现有方法&lt;&#x2F;h2&gt;
&lt;p&gt;为了解决前文所述的大模型在端侧部署的&lt;strong&gt;资源受限&lt;&#x2F;strong&gt;和&lt;strong&gt;计算低效&lt;&#x2F;strong&gt;两大问题，已有的工作可以分为模型压缩与推理优化两类方法。在实际部署中，两类方法往往需要综合使用，以达到最优效果。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mo-xing-ya-suo&quot;&gt;模型压缩&lt;&#x2F;h3&gt;
&lt;p&gt;要想降低模型的内存与算力开销，最直接的方法就是降低模型的大小。大模型常用的压缩方法包括量化、剪枝、蒸馏和低秩分解等。本节简单介绍这几种常用方法，也欢迎感兴趣的同学自行深入了解。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;量化（Quantization）&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#3&quot;&gt;3&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#4&quot;&gt;4&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#5&quot;&gt;5&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#6&quot;&gt;6&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 即用更少的 bit 数来表示模型参数，从而有效降低模型大小。按照是否在量化过程中训练模型，量化方法还可进一步分为训练后量化（Post-Training Quantization, PTQ）和量化感知训练（Quantization-Aware Training, QAT）。低 bit 量化（如 4-bit、3-bit）是当前研究探索的一个重要方向。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;剪枝（Pruning）&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#7&quot;&gt;7&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#8&quot;&gt;8&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#9&quot;&gt;9&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 即去除模型中一部分不重要的权重，从而降低模型的存储与计算开销。剪枝方法也可进一步分为结构化（structured）与非结构化（unstructured）两种，其中结构化剪枝对硬件计算更加友好。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;蒸馏（Distillation）&lt;&#x2F;strong&gt; 即使用已有的效果较好的 Teacher 模型（参数量大、精度高），去指导训练一个轻量的 Student 模型（参数量小，精度低），使得小模型输出与大模型接近。蒸馏方法常与量化和剪枝方法配合使用。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;低秩分解（Low-Rank Factorization）&lt;&#x2F;strong&gt; 即通过两个低秩矩阵的乘积来近似原权重矩阵，从而降低模型参数量和计算量。LoRA&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#10&quot;&gt;10&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;（Low-Rank Adaptation）及其变体就是一种利用低秩分解实现高效模型微调的方法。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;tui-li-you-hua&quot;&gt;推理优化&lt;&#x2F;h3&gt;
&lt;p&gt;除了模型压缩外，端侧 LLM 推理的计算过程也存在许多优化空间。为了解决延迟、内存等方面的问题，已有的工作中提出了如下方法。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;KV Cache&lt;&#x2F;strong&gt; 是一种以内存换时间的优化方法，在目前的推理框架中被普遍使用。其核心思想是将 Attention 计算中每次迭代包含重复计算的张量（也即 K 和 V）保存下来，并且随着序列的生成进行增量更新，从而避免重复计算。当序列长度增加时，KV Cache 的大小也会显著增长，需要采用适当的策略进行内存管理&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#11&quot;&gt;11&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#12&quot;&gt;12&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;投机采样（Speculative Sampling）&lt;&#x2F;strong&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#13&quot;&gt;13&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#14&quot;&gt;14&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-separator&quot;&gt;, &lt;&#x2F;sup&gt;&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#15&quot;&gt;15&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 能够在 small-batch 场景下提高吞吐量。所谓投机采样，即先通过一个轻量的小模型（draft model）生成（猜测）一组 token，再交由目标模型（target model）进行评估检验。对 draft model 一次生成的多个 token，可以通过一次目标模型前向计算并行验证，从而提高解码吞吐。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;算子优化&lt;&#x2F;strong&gt;目前的一个重要方向，是对 &lt;strong&gt;Attention&lt;&#x2F;strong&gt; 计算的优化。相比以稠密线性层为主的 FFN，Attention 包含随序列长度变化的矩阵乘、Softmax 等操作，需要针对访存和并行方式进行专门优化。近期的代表工作有 Flash-Decoding&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#16&quot;&gt;16&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 和 FlashDecoding++&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#17&quot;&gt;17&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 等。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;流式加载（Stream Loading）&lt;&#x2F;strong&gt; 即每次仅加载一部分权重到内存（或显存）中进行推理，从而降低整体的内存（显存）占用。FlexGen&lt;sup class=&quot;footnote-reference&quot;&gt;&lt;a href=&quot;#18&quot;&gt;18&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt; 通过对 GPU–CPU offloading 策略的设计实现了高吞吐的单卡 LLM 推理。但在要求低延迟而非高吞吐的场景下，由于 LLM 加载权重的开销过大，这类方法并不适用。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zong-jie-yu-zhan-wang&quot;&gt;总结与展望&lt;&#x2F;h2&gt;
&lt;p&gt;本文主要介绍了目前端侧大模型部署中的挑战与已有技术，其中涵盖了模型压缩与系统优化中的多个方向。&lt;strong&gt;笔者希望通过阅读本文，感兴趣的同学能够快速补充背景知识、了解最新进展。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;虽然文中已列出许多已有工作，但如何通过模型压缩与推理系统的协同优化，进一步降低大模型推理的硬件需求和功耗、提升大模型在资源受限设备上的运行效率，仍是一个重要的待解决问题。&lt;strong&gt;欢迎感兴趣的同学深入交流讨论（以及写得不好的地方多拍砖 0.0）。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;1&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;1&lt;&#x2F;sup&gt;
&lt;p&gt;Ashish Vaswani et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;1706.03762&quot;&gt;“Attention Is All You Need”&lt;&#x2F;a&gt;, NeurIPS, 2017.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;2&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;2&lt;&#x2F;sup&gt;
&lt;p&gt;Samuel Williams, Andrew Waterman, and David Patterson, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&#x2F;1498765.1498785&quot;&gt;“Roofline: An Insightful Visual Performance Model for Multicore Architectures”&lt;&#x2F;a&gt;, &lt;em&gt;Communications of the ACM&lt;&#x2F;em&gt;, 2009.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;3&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;3&lt;&#x2F;sup&gt;
&lt;p&gt;Elias Frantar et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2210.17323&quot;&gt;“GPTQ: Accurate Post-Training Quantization for Generative Pre-Trained Transformers”&lt;&#x2F;a&gt;, ICLR, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;4&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;4&lt;&#x2F;sup&gt;
&lt;p&gt;Guangxuan Xiao et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2211.10438&quot;&gt;“SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models”&lt;&#x2F;a&gt;, ICML, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;5&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;5&lt;&#x2F;sup&gt;
&lt;p&gt;Ji Lin et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2306.00978&quot;&gt;“AWQ: Activation-Aware Weight Quantization for LLM Compression and Acceleration”&lt;&#x2F;a&gt;, MLSys, 2024.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;6&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;6&lt;&#x2F;sup&gt;
&lt;p&gt;Zechun Liu et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2305.17888&quot;&gt;“LLM-QAT: Data-Free Quantization Aware Training for Large Language Models”&lt;&#x2F;a&gt;, arXiv, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;7&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;7&lt;&#x2F;sup&gt;
&lt;p&gt;Elias Frantar and Dan Alistarh, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2301.00774&quot;&gt;“SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot”&lt;&#x2F;a&gt;, ICML, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;8&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;8&lt;&#x2F;sup&gt;
&lt;p&gt;Xinyin Ma, Gongfan Fang, and Xinchao Wang, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2305.11627&quot;&gt;“LLM-Pruner: On the Structural Pruning of Large Language Models”&lt;&#x2F;a&gt;, NeurIPS, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;9&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;9&lt;&#x2F;sup&gt;
&lt;p&gt;Mingjie Sun et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2306.11695&quot;&gt;“A Simple and Effective Pruning Approach for Large Language Models”&lt;&#x2F;a&gt;, ICLR, 2024.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;10&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;10&lt;&#x2F;sup&gt;
&lt;p&gt;Edward J. Hu et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2106.09685&quot;&gt;“LoRA: Low-Rank Adaptation of Large Language Models”&lt;&#x2F;a&gt;, ICLR, 2022.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;11&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;11&lt;&#x2F;sup&gt;
&lt;p&gt;Woosuk Kwon et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2309.06180&quot;&gt;“Efficient Memory Management for Large Language Model Serving with PagedAttention”&lt;&#x2F;a&gt;, SOSP, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;12&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;12&lt;&#x2F;sup&gt;
&lt;p&gt;Reiner Pope et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2211.05102&quot;&gt;“Efficiently Scaling Transformer Inference”&lt;&#x2F;a&gt;, MLSys, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;13&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;13&lt;&#x2F;sup&gt;
&lt;p&gt;Yaniv Leviathan, Matan Kalman, and Yossi Matias, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2211.17192&quot;&gt;“Fast Inference from Transformers via Speculative Decoding”&lt;&#x2F;a&gt;, ICML, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;14&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;14&lt;&#x2F;sup&gt;
&lt;p&gt;Charlie Chen et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2302.01318&quot;&gt;“Accelerating Large Language Model Decoding with Speculative Sampling”&lt;&#x2F;a&gt;, arXiv, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;15&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;15&lt;&#x2F;sup&gt;
&lt;p&gt;Benjamin Spector and Chris Ré, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2308.04623&quot;&gt;“Accelerating LLM Inference with Staged Speculative Decoding”&lt;&#x2F;a&gt;, arXiv, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;16&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;16&lt;&#x2F;sup&gt;
&lt;p&gt;Tri Dao et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crfm.stanford.edu&#x2F;2023&#x2F;10&#x2F;12&#x2F;flashdecoding.html&quot;&gt;“Flash-Decoding for Long-Context Inference”&lt;&#x2F;a&gt;, Stanford CRFM Blog, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;17&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;17&lt;&#x2F;sup&gt;
&lt;p&gt;Ke Hong et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2311.01282&quot;&gt;“FlashDecoding++: Faster Large Language Model Inference on GPUs”&lt;&#x2F;a&gt;, MLSys, 2024.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
&lt;div class=&quot;footnote-definition&quot; id=&quot;18&quot;&gt;&lt;sup class=&quot;footnote-definition-label&quot;&gt;18&lt;&#x2F;sup&gt;
&lt;p&gt;Ying Sheng et al., &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2303.06865&quot;&gt;“FlexGen: High-Throughput Generative Inference of Large Language Models with a Single GPU”&lt;&#x2F;a&gt;, ICML, 2023.&lt;&#x2F;p&gt;
&lt;&#x2F;div&gt;
</content>
  </entry>
  
</feed>
