标签 yarn 下的文章

传统 MoE 架构通常通过增加专家数量来提升模型能力,但随着专家数量增加,会面临边际收益递减和系统通信开销上升等问题。美团 LongCat 团队通过全面的分析与实验发现:嵌入扩展相比专家扩展能获得更优的帕累托前沿。这意味着嵌入扩展在特定条件下相比专家扩展能实现更优的效能边界。

基于这些洞见,我们正式推出 LongCat-Flash-Lite——一款拥有 685 亿参数,每次推理仅激活29亿~45亿参数的轻量化 MoE 模型。通过将超过 300 亿参数高效用于嵌入层,LongCat-Flash-Lite 不仅超越了参数量等效的 MoE 基线模型,还在与同规模现有模型的对比中展现出卓越的竞争力,尤其在智能体与代码领域表现突出,并依托 YARN 技术可支持最长 256 K上下文,能高效处理长文档、大规模代码分析等场景。同时,该模型基于嵌入扩展的应用与系统级优化,让模型推理效率大幅提升,在输入 4K,输出 1k 的典型负载下,LongCat API 可提供 500-700 token/s 的生成速度。

01 更优的扩展效率:从“堆专家”到“扩嵌入”

N-gram嵌入层的核心作用在于增强模型对局部上下文语义的捕获能力。它通过哈希函数,将当前token及其前序的N-1个token所构成的序列映射为一个整体的N-gram嵌入向量,并与该token的基础嵌入向量融合。举个例子,当模型看到 “打开终端输入命令”,就不会误解成日常的 “打开文件”,而是能精准锁定 “编程” 这个场景,显著提升了语义理解的精准度。

在生成N-gram嵌入向量的过程中,关键挑战在于避免哈希冲突,即不同的N-gram序列被映射到同一个向量。为此,LongCat团队采用了两个关键设计:

  • 子表分解与线性投影:将大型的N-gram嵌入表拆分为多个子表,并分别进行线性投影变换,此举可大幅降低哈希碰撞的概率。
  • 词汇表大小避坑:N-gram嵌入表的词汇表大小需要仔细设计以降低哈希碰撞率。此外,通过引入嵌入放大技术(如在输出前添加缩放因子或层归一化),确保了嵌入层提供的语义信号在深层网络的残差连接中不会被注意力模块的输出所淹没,从而保障了其贡献在整个前向传播过程中的有效性。

02 卓越的推理效率:三重优化实现极致加速

N-gram 嵌入层不仅能提升模型能力,其结构特性还为推理加速提供了新方向。尽管模型总参数量达 685 亿,但通过动态激活机制,每次推理仅激活29亿~45亿参数。为进一步放大这一稀疏优势,我们在系统层面进行了三重核心优化:

  • 参数智能分配:我们将 31.4B 参数(占总参数 46%)投入 N-gram 嵌入层。相较于单纯增加 MoE 专家数量,此方案在达到高模型稀疏度后,既能有效减少专家模块间的通信与调度开销,又得益于嵌入层 O(1) 的查找复杂度,避免了参数扩容带来的计算线性增长。
  • 专用缓存与内核优化:我们设计了 N-gram Cache 专用缓存机制(灵感源于KV Cache),直接在GPU设备上管理 N-gram ID,与推理框架中复杂的动态调度逻辑实现低开销同步,大幅降低嵌入查找的I/O延迟。同时,通过定制CUDA内核及广泛的内核融合(如 AllReduce+Residual Add+RMSNorm、路由器Logits的Softmax+TopK+Scaling融合)与 PDL(Programmatic Dependent Launch) 等技术,提升GPU占用率,减少内核启动间隙。
  • 推测解码协同:为充分发挥稀疏激活优势,我们将其与 推测解码 策略深度协同。通过3步的投机推理,扩大了实际的批次大小,利用到了低激活总参的特性,同时针对草案模型(draft model)延迟敏感的特性,让其使用常规嵌入层以规避N-gram查找计算的开销,进一步提升了推理性能。

总结而言,通过参数重分配奠定稀疏基础、专用缓存与内核优化消除系统开销、与推测解码策略深度协同,LongCat-Flash-Lite 实现了从模型结构到运行时系统的垂直优化,最终将 N-gram 嵌入带来的理论优势,有效转化为高吞吐、低延迟的实际推理性能。

03 性能表现:智能体工具使用与编程能力双领先

LongCat-Flash-Lite 在智能体工具使用与编程任务上均展现出领先性能:τ²-Bench 三大行业场景高分领先,编程领域覆盖全链路能力,在代码修复、终端执行、多语言开发等任务上表现优异。

智能体任务表现

在评估复杂工具使用与工作流执行的基准上,模型表现突出:

  • τ²-Bench行业场景:在电信(72.8分)、零售(73.1分)、航空(58.0分)三大子场景中均取得最高分,表明其能有效理解并执行涉及专业工具的复杂指令。
  • VitaBench通用场景:以7.0分领先于对比模型,验证了其在多样化现实任务中的实用工具调用能力。

代码任务表现

在衡量编程实用技能的基准上,模型展现出强劲的问题解决能力:

  • 代码修复(SWE-Bench):54.4%的准确率显著领先于同规模对比模型,证明其处理真实软件工程问题(如修复bug、实现特性)的有效性。
  • 终端命令执行(TerminalBench):33.75分的表现远超对比模型所处的15-20分区间,体现了对开发者工作流中命令行操作的高精度理解。
  • 多语言代码生成(SWE-Bench Multilingual):38.10%的准确率展现了跨编程语言与软件生态的较好泛化能力。

通用知识及推理能力

模型在综合评估中保持了与规模相匹配的均衡性能:

  • 综合知识(MMLU):85.52分,与Gemini 2.5 Flash-Lite(84.68)相当。
  • 中文理解(C-Eval & CMMLU):分别取得86.55分与82.48分,在中文评估中具备一定优势。
  • 复杂推理(MMLU-Pro, GPQA-Diamond):78.29分与66.78分的表现,显示了处理高阶、多学科问题的能力。
  • 数学推理(MATH500, AIME):在基础(96.80%)与竞赛级数学问题(AIME24:72.19; AIME25:63.23)上均表现稳健,擅长多步推演。

轻量,不“轻”性能:开源与体验,即刻开始

LongCat-Flash-Lite 的实践,为大模型的高效扩展提供了一种新的可能性:通过 N-gram 嵌入系统级优化的协同设计,我们得以用29亿~45亿的动态激活参数,在智能体与编码等关键任务上,实现与更大模型比肩的竞争力。

技术的生命力源于开放与协作。因此,我们已全面开源模型权重及技术细节,诚邀每一位开发者体验、研究与共建。

开源平台

LongCat 系列模型一直遵循的是 Model System Co-Design 的设计原则,因此对于训练和推理系统都提出了独特的挑战。为了让社区能够更好地使用 LongCat 模型,我们对推理引擎的部分功能(SGLang-FluentLLM)和部分算子也同步进行了开源,欢迎体验:

在线体验与调用

我们已向开发者开放 LongCat-Flash-Lite 版本 API 接口,可登录 LongCat API 开放平台申请,每日免费额度高达5000万tokens。(目前暂不限额,欢迎试用)

我们期待与社区一起,探索大模型高效落地的更多可能。欢迎 Star、Fork、反馈与合作。

| 关注「美团技术团队」微信公众号,阅读更多技术干货!

| 本文系美团技术团队出品,著作权归属美团。欢迎出于分享和交流等非商业目的转载或使用本文内容,敬请注明“内容转载自美团技术团队”。本文未经许可,不得进行商业性转载或者使用。任何商用行为,请发送邮件至 tech@meituan.com 申请授权。

在过去一年中,我们见证了多起重大攻击事件,例如 Shai-Hulud 蠕虫攻击、Nx 构建系统被攻破,以及通过 tj-actions/changed-files 漏洞导致机密信息泄露到公开的 GitHub Actions 日志中。但仅仅是罗列各种攻击事件,就足以占据本文的全部篇幅,更不用说深入探讨了。

作为一个行业和生态系统,我们能感受到攻击频率的日益增加。仅在 2024 年,报告的恶意软件包数量就同比增长了 156%。鉴于 Mend 托管的 Renovate Cloud 平台受信于超过 130 万个代码仓库,我们在保护开源软件消费者方面处于非常有利的地位,同时也为自托管 Renovate 的用户提供了更强的安全默认设置。在一系列备受瞩目的 npm 供应链安全攻击之后,Mend Renovate 的维护者们决定,对于选择采纳“最佳实践”配置的用户,默认启用这项安全功能是最佳选择。

为了帮助客户更好地应对这些日益增多的攻击,维护团队正在 Mend Renovate 现有的“最佳实践”配置之上进行构建。该团队一直致力于提供更多“默认即安全”的配置,并首先从 npm 生态系统着手。

在最新的 Mend Renovate 42 版本中,使用“最佳实践”配置的用户将会发现,npm 生态系统中的依赖项更新现在需要通过一个“最短发布时间”的检查,即某个更新发布后必须经过 3 天的窗口期,Mend Renovate 才会提议进行更新。通过这种方法,组织可以确保只有经过验证的、稳定的和值得信赖的依赖项更新才能进入生产环境,从而在保持开发者效率的同时,最终降低供应链攻击的风险。

这有何帮助?
尽管影响广泛,但这些攻击通常利用了两种常见情况:

  • 依赖项的精确版本未被锁定。
  • 依赖项的精确版本已被锁定,但我们在其发布后极短时间内就尝试更新。

不锁定依赖项版本可能有其合理的原因。例如,在 npm 生态系统中,当你发布一个拥有若干依赖项且被许多其他包所依赖的包时。

如果每次你提升一个依赖版本都需要发布自己的包,那么所有依赖于你的包也同样需要提升版本并发布新版,从而在整个生态系统中引发连锁效应。

其中一些过程可以通过自动化来简化——自然是使用像 Mend Renovate 或 GitHub 的 Dependabot 这样的工具,但这仍然需要一定程度的人工审查。

与此同时,不锁定我们的依赖项可能会导致问题,用户可能会立即开始下载一个包的新版本。
在推荐锁定依赖版本后,下一个问题是我们应该多久更新一次。许多工具中现有的默认设置是“一旦有新版本就立即更新”,这可能导致一个恶意升级在其发布几分钟内就被创建为拉取请求 (Pull Request)。

尽管那个恶意的依赖项可能不会进入您开发人员的机器——但它有可能从您的自动化构建管道中窃取机密或其他特权信息——或者利用您 AI 驱动的代码审查工具中的提示注入漏洞。

如果我们增加软件包发布与它出现在您项目的拉取请求中的时间间隔,这就为安全研究人员和自动化安全工具提供了更多时间来发现软件包中的恶意意图,从而减少供应链攻击的可能性。
Mend Renovate 如何助力保障整个生态系统的安全

如上所述,在 Mend Renovate 的最新版本中,我们为所有使用“最佳实践”配置的用户启用了“最短发布时间”检查的强制执行。这适用于更新任何使用 npm 数据源的包,无论其使用的是何种 JavaScript/TypeScript 包管理器。

这项强制执行将:

  • 确保给定的依赖项更新包含其发布时间的元数据(“发布时间戳”)。
  • 确保在该版本发布后未满最少 3 天之前,不会创建任何分支。

如果发现不满足此要求的包更新,Mend Renovate 的依赖项仪表板中将包含一个“等待状态”的条目,并且需要人工明确请求才能更新——从而确保只有“安全”的包更新才会被提出。

(这里的一个告诫是,增加等待时间并不一定意味着所有问题都能被发现——由于针对性攻击或复杂的规避技术,所有问题可能无法都被捕获。)

通过将此功能直接添加到我们的“最佳实践”配置中,那些已经选择遵循行业最佳实践的用户将默认受到保护。而其他所有人也能够添加此功能,例如:
codeJSON

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["security:minimumReleaseAgeNpm"]
}

此外,还可以调整此行为——将等待窗口设置得任意长或短——或者对受信任的内部开发包绕过“最短发布时间”功能。

纵深防御
除了让 Mend Renovate 在满足特定条件(即经过一个给定的窗口期)前不发起更新之外,我们还建议建立多层防御:

在可能的情况下,在您的包管理器中启用此功能,以保护开发人员的机器;和/或在您的自动化构建管道中启用此功能,在发布窗口期过去之前使构建失败。

在撰写本文时,pnpm 10.6 和 yarn 4.2.0 已添加了对这些功能的支持,我们也看到其他包管理器正在考虑添加类似功能。

下一步计划?
继此版本的工作之后,维护团队将继续研究其他包生态系统,以便为我们的“最佳实践”配置启用相应功能,从而进一步保障面向消费者的产品和内部开发环境的安全!

Vue3 核心知识点读书笔记

一、Vue 核心原理与架构

1. MVVM 核心模式(核心架构)

Vue 基于 MVVM 模式设计,核心是实现视图与数据的解耦,三者关系如下:

模块核心职责
Model数据层,负责业务数据处理(纯数据,无视图交互逻辑)
View视图层,即用户界面(仅展示内容,不处理数据逻辑)
ViewModel桥梁层,连接 View 和 Model,包含两个核心能力:
✅ DOM Listeners:监听 View 中 DOM 变化,同步到 Model
✅ Data Bindings:监听 Model 中数据变化,同步到 View
关键:View 和 Model 不能直接通信,必须通过 ViewModel 中转,实现解耦。

2. Vue 核心特性(四大核心)

特性具体说明示例/应用场景
数据驱动视图数据变化自动触发视图重新渲染,无需手动操作 DOM修改变量值 → 页面自动更新
双向数据绑定视图变化 ↔ 数据变化双向同步表单输入框内容自动同步到数据变量
指令分内置指令(Vue 自带)和自定义指令,以v-开头绑定到 DOM 元素v-bind(单向绑定)、v-if(条件渲染)、v-for(列表渲染)
插件支持扩展功能,配置简单VueRouter(路由)、Pinia(状态管理)

二、Vue 版本与开发环境

1. Vue2 vs Vue3 核心差异

维度Vue3 变化
新增功能组合式(Composition)API、多根节点组件、底层渲染/响应式逻辑重构(性能提升)
废弃功能过滤器(Filter)、$on()/$off()/$once() 实例方法
兼容性兼容 Vue2 绝大多数 API,新项目推荐直接使用 Vue3

2. 开发环境准备(必装)

  1. 编辑器:VSCode → 安装「Vue (Official)」扩展(提供代码高亮、语法提示)
  2. 运行环境:Node.js(官网下载安装,为包管理工具提供基础)
  3. 包管理工具:npm/yarn(管理第三方依赖,支持一键安装/升级/卸载,避免手动下载解压)

三、Vite 创建 Vue3 项目(核心操作)

1. 项目创建命令(适配 npm10 版本)

# Yarn 方式(推荐)
yarn create vite hello-vite --template vue

# 交互提示处理(关键步骤,不要遗漏):
# 1. 提示 "Use rolldown-vite (Experimental)?" → 回车选 No(优先使用稳定版)
# 2. 提示 "Install with yarn and start now?" → 回车选 Yes(自动安装依赖并启动项目)

2. 手动创建命令(补充)

# npm 方式
npm create vite@latest
# yarn 方式
yarn create vite
# 后续需手动填写项目名称、选择框架(Vue)、选择变体(JavaScript)

四、Vue3 项目核心文件与目录

1. 项目目录结构(重点关注)

hello-vite/          # 项目根目录
├── node_modules/    # 第三方依赖包(自动生成)
├── dist/            # 构建产物(执行 yarn build 后生成,用于部署)
├── src/             # 源代码目录(开发核心)
│   ├── assets/      # 静态资源(图片、样式等)
│   ├── components/  # 自定义组件
│   ├── App.vue      # 根组件
│   ├── main.js      # 项目入口文件
│   └── style.css    # 全局样式
├── index.html       # 页面入口文件
└── package.json     # 项目配置(依赖、脚本命令)

2. 核心文件代码解析(带完整注释)

(1)index.html(页面入口)
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>hello-vite</title>
  </head>
  <body>
    <!-- Vue 实例挂载容器:被 main.js 中的 Vue 实例控制 -->
    <div id="app"></div>
    <!-- type="module":启用 ES6 模块化语法,引入项目入口文件 -->
    <script type="module" src="/src/main.js"></script>
  </body>
</html>
(2)src/main.js(项目入口,创建 Vue 实例)
// 从 Vue 中导入创建应用实例的核心函数
import { createApp } from 'vue'
// 导入全局样式文件
import './style.css'
// 导入根组件(App.vue)
import App from './App.vue'

// 方式1:简洁写法(创建实例 + 挂载到 #app 容器)
createApp(App).mount('#app')

// 方式2:分步写法(更易理解,效果一致)
// const app = createApp(App) // 创建 Vue 应用实例
// app.mount('#app') // 挂载实例(仅可调用一次)
(3)src/App.vue(根组件,单文件组件核心)
<!-- script setup:Vue3 组合式 API 语法糖,简化组件编写 -->
<script setup>
// 导入子组件(HelloWorld.vue)
import HelloWorld from './components/HelloWorld.vue'
</script>

<!-- template:组件模板结构(视图部分) -->
<template>
  <div>
    <a href="https://vite.dev" target="_blank">
      <img src="/vite.svg" class="logo" alt="Vite logo" />
    </a>
    <a href="https://vuejs.org/" target="_blank">
      <img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
    </a>
  </div>
  <!-- 使用子组件,传递 msg 属性 -->
  <HelloWorld msg="Vite + Vue" />
</template>

<!-- style scoped:样式仅作用于当前组件(通过 Hash 隔离,不影响子组件) -->
<style scoped>
.logo {
  height: 6em;
  padding: 1.5em;
  will-change: filter;
  transition: filter 300ms;
}
.logo:hover {
  filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
  filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

五、核心知识点总结

1. 核心原理

  • Vue 基于 MVVM 模式,通过 ViewModel 实现视图与数据的双向驱动,核心是「数据驱动视图」,无需手动操作 DOM;
  • 双向数据绑定是 Vue 核心特性,表单场景下可自动同步视图与数据。

2. 项目开发

  • Vue3 推荐使用 Vite 创建项目(比 VueCLI 更快),npm10 版本下优先用 yarn create vite 项目名 --template vue 命令;
  • 项目核心文件:index.html(页面入口)→ main.js(创建 Vue 实例)→ App.vue(根组件),三者构成项目基础骨架。

3. 关键注意点

  • mount() 方法仅可调用一次,挂载目标可以是 DOM 元素或 CSS 选择器(#app/.app);
  • <style scoped> 样式仅作用于当前组件,避免样式污染;
  • Vue3 废弃了过滤器、$on/$off/$once 等功能,开发时需避开。