MoE 系列(一)|如何使用 Golang 扩展 Envoy

【人工智能】MOE架构的详细解析 MOE(Mixture of Experts,混合专家)架构是一种用于提高深度学习模型性能和效率的神经网络架构设计。以下是对MOE架构的详细解析: 阅读详情

bb483c6be3eae18acc739af9f7e40655.gif

文|朱德江(GitHub ID:doujiang24)

MOSN 项目核心开发者

蚂蚁集团技术专家

38f8852826c226b66e7089a590f5050f.png

专注于云原生网关研发的相关工作

本文 2680 字 阅读 7 分钟

本文作为 MoE 系列第一篇,主要介绍用 Golang 扩展 Envoy 的极速开发体验。

一、背景

MoE(MOSN on Envoy)是 MOSN 团队提出的技术架构,经过近两年的发展,在蚂蚁内部已经得到了很好的验证;并且去年我们也将底层的 Envoy Go 七层扩展贡献了 Envoy 官方,MOSN 也初步支持了使用 Envoy 作为网络底座的能力。

借此准备写一系列的文章,逐一介绍这里面的技术。本文作为开篇,将重点介绍 MoE 中的基础技术,Envoy Go 扩展。

二、FAQ

开始前,先给大家解答下几个基本的问题:

1、MoE 与 Envoy Go 扩展有什么区别?

A:MoE 是技术架构,Envoy Go 扩展是连接 MOSN 和 Envoy 的基础技术。

2、Envoy Go 扩展,与用 Go 来编译 Wasm 有什么区别?

A:Envoy Go 支持 Go 语言的所有特性,包括 Goroutine;Go Wasm 则只能使用少量的 Go 语言特性,尤其是没有 Goroutine 的支持。

3、Go 是静态链接到 Envoy 么?

A:不是的,Go 扩展编译成为 so,Envoy 动态加载 so,不需要重新编译 Envoy

4、Envoy Go 支持流式处理么?

A:支持的。

由于 Go 扩展提供的是底层的 API,非常的灵活,使用上相对会稍微复杂一些;如果只想简单的使用,可以使用 MOSN 的 filter,后面我们也会介绍。

三、需求

我们先实现一个小需求,来实际体会一下:

对请求需要进行验签,大致是从 URI 上的某些参数,以及私钥计算一个 token,然后和 header 中的 token 进行对比,对不上就返回 403。

很简单的需求,仅仅作为示例,主要是体验一下过程。🧸

四、代码实现

完整的代码可以看 envoy-go-filter-example[1] 这个仓库,这里摘录最核心的两个函数:

const secretKey = "secret"


func verify(header api.RequestHeaderMap) (bool, string) {
    token, ok := header.Get("token")
    if ok {
        return false, "missing token"
    }


    path, _ := header.Get(":path")
    hash := md5.Sum([]byte(path + secretKey))
    if hex.EncodeToString(hash[:]) != token {
        return false, "invalid token"
    }
    return true, ""
}


func (f *filter) DecodeHeaders(header api.RequestHeaderMap, endStream bool) api.StatusType {
    if ok, msg := verify(header); !ok {
        f.callbacks.SendLocalReply(403, msg, map[string]string{}, 0, "bad-request")
        return api.LocalReply
    }
    return api.Continue
}

DecodeHeaders 是扩展 filter 必须实现的方法,我们就是在这个阶段对请求 header 进行校验。

verify 是校验函数,这里的 RequestHeaderMap 是 Go 扩展提供的 interface,我们可以通过它来读写 header,其他都是常见的 Go 代码写法。

五、编译

编译很简单,与常见的 Go 编译一样,这里我们使用 Golang 官方的 docker 镜像来编译:

docker run --rm -v `pwd`:/go/src/go-filter -w /go/src/go-filter \
-e GOPROXY=https://goproxy.cn \
golang:1.19 \
go build -v -o libgolang.so -buildmode=c-shared .

Go 编译还是很快的,只需要几秒钟,当前目录下,就会产生一个 libgolang.so 的文件。反观 Envoy 的编译速度,一次全量编译动辄几十分钟,或者上小时的,这幸福感提升了不止一个档次。🥰

六、运行

我们可以使用 Envoy 官方提供的镜像来运行,如下示例:

docker run --rm -v `pwd`/envoy.yaml:/etc/envoy/envoy.yaml \
        -v `pwd`/libgolang.so:/etc/envoy/libgolang.so \
        -p 10000:10000 \
        envoyproxy/envoy:contrib-dev \
        envoy -c /etc/envoy/envoy.yaml

只需要把上一步编译的 libgolang.so 和 envoy.yaml 挂载进去就可以了。

值得一提的是,我们需要在 envoy.yaml 配置中启用 Go 扩展,具体是这段配置:

http_filters:
  - name: envoy.filters.http.golang
    typed_config:
      "@type": type.googleapis.com/envoy.extensions.filters.http.golang.v3alpha.Config
      library_id: example
      library_path: /etc/envoy/libgolang.so
      plugin_name: example-1

跑起来之后,我们测试一下:

$ curl 'http://localhost:10000/'
missing token
$ curl -s 'http://localhost:10000/' -H 'token: c64319d06364528120a9f96af62ea83d' -I
HTTP/1.1 200 OK

符合期望,是不是很简单呢?👀

七、后续

什么?这个示例太简单?

是的,这里主要是体验下开发流程,下篇我们将再介绍更高级的玩法:

Go 接受来自 Envoy 侧的配置、异步 Goroutine,以及与 Istio 配合的用法。

|相关链接|

[1]envoy-go-filter-example 仓库:

https://github.com/doujiang24/envoy-go-filter-example/tree/master/example-1

了解更多…

MOSN Star 一下✨:
https://github.com/mosn/mosn

   本周推荐阅读  

499ade83ec68d6c2893d552baebfebb5.jpeg

MOSN 反向通道详解

e7d7be8be0a874ffc63b3e820ff597fe.png

Go 原生插件使用问题全解析

8e269a7165d98a75c9289f1c4567df10.png

Go 内存泄漏,pprof 够用了么?

d61ecb7d990acdf5c58a42231ec98d68.png

从规模化平台工程实践,我们学到了什么?

f9e3f46543ca52c45fea0af5475d9a0c.jpeg

详解大模型结构MOE(混合专家网络) MOE全称:Mixture of expert, 是大模型的结构之一。 阅读详情

相关推荐

MOE(Mixture of Experts,混合专家)

MOE架构已被广泛应用于多个领域,包括自然语言处理(NLP)和计算机视觉(CV)等。在NLP领域,MOE被用于构建大型语言模型(如GPT-4),以提高模型的性能和效率。在CV领域,MOE也被用于图像分类、目标检测等任务中。在训练过程中,模型会学习如何根据输入数据的特征选择最合适的专家进行处理。在推理过程中,门控机制会根据输入数据选择一组专家进行激活,并产生输出。,实现了对输入数据的精细化处理和计算资源的智能分配。这种架构在提高模型性能和效率方面具有重要意义,并已在多个领域得到广泛应用。

ZhangJiqun&191cm&85kg 1438

MoE 系列(五)|Envoy Go 扩展之内存安全

相对来说,不考虑并发的内存安全,还是比较简单的,只有复制最安全,需要权衡考虑的则更多是优化的事情了。比较复杂的还是并发时的安全处理,这个我们下回再聊。

金融级分布式架构 1206

伪傻瓜式安装sql server2008【附带安装包】

安装各式各样的软件无疑是学习过程中…较…为烦躁的一部分 木有醋 但还是开始吧 为什么这是伪呢? 因为刚开始天真无邪的我真的是傻瓜式安装(迷之自信),结果就B了(打开配置管理器的瞬间….一片空白) BaiduCloud分享 红领巾在何方?? Link链接:https://pan.baidu.com/s/1NZCxP0Y27dBPrgHoRWLDyQ...

EuniBoom的博客 6万+

【大模型理论篇】--Mixture of Experts架构

概括来看,在MoE模型中,用混合专家层替换 Transformer 模型的每个前馈网络层,混合专家层由一个门控网络和一定数量的专家组成。在MoE模型的核心是“专家”子网络。这些专家是更大神经网络中的独立模块,每个模块都能够处理输入数据。其概念是不同的专家专注于输入数据的不同方面,从而使模型能够有效利用专门的知识。门控机制是一个关键组件,负责将输入引导至适当的专家网络。它根据一组门控值来决定每个专家的参与程度。门控机制可以实现为稠密或稀疏结构,其中稀疏结构由于选择性地激活部分专家,因而在计算上更加高效。

我是个好人呀,O(∩_∩)O 5331

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7326

基于 VS Code + CMake + Make + GNU工具链 + OpenOCD 的通用MCU开发环境搭建教程

以CH32V307(RISCV)和STM32F103(Cortex-M3)为例的Vscode+gnu单片机环境搭建。

余十三_的博客 2176

MoE 系列(二)|Golang 扩展从 Envoy 接收配置

上一篇我们用一个简单的示例,体验了用 Golang 扩展 Envoy 的极速上手。这次我们再通过一个示例,来体验 Golang 扩展的一个强大的特性:从 Envoy 接收配置。

金融级分布式架构 583

VS2103+Intel2013+MSMPI运行Fortran并行程序

VS2103+Intel2013+MSMPI运行Fortran并行程序MSMPI安装新建Fortran90项目编写Fortran并行程序在cmd运行编译完成的执行文件 MSMPI安装 我这里采用的是Microsoft MPI v9.0.1,可以点此下载。下载完成后同时安装msmpisdk.msi、msmpisetup.exe两个文件,安装位置默认即可。 其中msmpisdk.msi的默认安装路径在C:\Program Files (x86)\Microsoft SDKs\MPI,该文件包含了mpi环境所需

weixin_43176703的博客 2937

MoE 系列(四)|Go 扩展的异步模式

文|朱德江(GitHub ID:doujiang24)MOSN 项目核心开发者蚂蚁集团技术专家专注于云原生网关研发的相关工作本文3085字 阅读8分钟在《MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置》中我们体验了用 Istio 做控制面,给 Go 扩展推送配置,这次我们来体验一下,在 Go 扩展的异步模式下,对 Goroutine 等全部 Go 特性的支持。异步模式之前,...

金融级分布式架构 277

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 939

【异常】DeepSeek API HTTP 401 认证失败错误完整排查与解决方案

摘要:本文针对DeepSeek API开发中的HTTP 401认证失败错误进行深度解析,指出该错误属于不可重试的认证类问题。文章首先拆解错误日志关键字段,区分401与其他API错误的本质差异。随后提供优先级排序的全链路解决方案:1)检查API密钥有效性;2)规范请求头认证格式;3)排查账户权限状态;4)验证请求环境配置。最后建议通过新建测试密钥、使用官方示例代码或联系技术支持进行兜底处理。全文采用技术脱敏处理,为开发者提供系统性的401错误排查指南。(149字)

奶爸的编程之路,也就一周冷个三天 1530

MoE 系列(七)| Envoy Go 扩展之沙箱安全

文|朱德江(GitHub ID:doujiang24)MOSN 项目核心开发者蚂蚁集团技术专家专注于云原生网关研发的相关工作本文707字 阅读3分钟在本系列的第 5 篇《MoE 系列(五)|Envoy Go 扩展之内存安全》中我们介绍了内存安全如何实现。第 6 篇《MoE 系列(六)| Envoy Go 扩展之并发安全》又谈到了并发场景下的内存安全。今天,我们来到了安全性的最后一篇:...

金融级分布式架构 224

非洲秃鹫优化算法(AVOA)详解:从原理到实战

非洲秃鹫优化算法(AVOA)是一种模拟秃鹫觅食行为的元启发式算法。该算法通过数学建模秃鹫的群体分工、饥饿感知和食物竞争等行为,将优化问题转化为智能觅食过程。AVOA包含四个关键阶段:(1)种群初始化与最佳秃鹫选择;(2)饥饿率控制探索与开发平衡;(3)探索阶段模拟远距离飞行搜索;(4)开发阶段模拟食物源附近的竞争行为。算法采用饥饿率函数实现自适应搜索,初期偏向全局探索,后期转向局部开发。实验表明AVOA在标准测试函数和工程设计问题上表现出优越性能,其创新性在于将秃鹫独特的生物学特性转化为高效的优化机制。

qq_42212808的博客 228

MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置

Istio 提供了 EnvoyFilter CRD,所以,用 Istio 来配置 Go 扩展也比较方便,apply 这段配置,Basic Auth 就开启了。下一篇,我们将介绍,如何在 Go 扩展中使用异步协程。至此,我们已经体验了整个 Envoy Go 的开发&使用流程,在云原生时代,人均 Golang 的背景下,相信可以很好的完成网关场景的各种定制需求。之前我们介绍过,Go 扩展是单独编译为 so 文件的,所以,我们需要把 so 文件,挂载到 Ingress Gateway 中。

金融级分布式架构 1060

LangGraph-StateGraph 和 Graph API 源码分析

摘要: StateGraph是LangGraph的核心API,用于构建有状态工作流图。本文分析了其实现原理,包括: 核心类关系:StateGraph(构建器)和CompiledStateGraph(继承自Pregel的可执行图) 关键流程:状态模式到通道的映射、节点到PregelNode的转换 实现特点: 支持TypedDict和Pydantic两种状态模式 自动选择通道类型(LastValue或BinaryOperatorAggregate) 通过映射函数处理节点输入输出 边实现基于通道写入机制 编译过程

838

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MoE 系列[六] - Envoy Go 扩展之并发安全

文|朱德江(GitHub ID:doujiang24)MOSN 项目核心开发者蚂蚁集团技术专家专注于云原生网关研发的相关工作本文1313字 阅读4分钟前一篇介绍了 Envoy Go 扩展的内存安全,相对来说,还是比较好理解的,主要是 Envoy C++ 和 Go GC 都有自己一套的内存对象的生命周期管理。这篇聊的并发安全,则是专注在并发场景下的内存安全,相对来说会复杂一些。并发的原因首先...

金融级分布式架构 178

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

开启云原生 MOSN 新篇章 — 融合 Envoy 和 Golang 生态

注:本文是王发康(毅松)在 2021 GopherChina 上演讲的文字稿,相关分享 PPT 可自行到 MOSN meetup 下载。MOSN meetup 地址:https://git...

梦醒人间 1007

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SOFA Weekly|SOFAArk 会议预告、社区本周贡献 & issue 精选

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 501

MOSN 发布 v1.0 版本!

MOSN(Modular Open Smart Network)是一款主要使用 Go 语言开发的云原生网络代理平台,由蚂蚁集团开源并经过双 11 大促几十万容器的生产级验证。经过 4 年的蓬勃发展,在 11 位 Commiter、100 多位Contributor 和整个社区的共同努力下,经历 27 个小版本的迭代...现在 MOSN 1.0 版本正式发布了!一个足够...

金融级分布式架构 423

SOFA Weekly|SOFA 大事记、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 616

SOFA Weekly|SOFA 聊天室、issue 精选

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 178

【开源之夏 2023】欢迎报名 MOSN 社区项目!

MOSN 为服务提供多协议、模块化、智能化、安全的代理能力,融合了大量云原生通用组件,同时也可以集成 Envoy 作为网络库,具备高性能、易扩展的特点。开源之夏是由“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展,培养和发掘更多优秀的开发者。Envoy 是当前最流行的网络代理之一,Go 扩展是 MOSN 社区为 Envoy 增加的 Go 生态基础,也是 MOSN 社区 MoE 框架的基础。(分支、版本、合并请求等)

金融级分布式架构 268

MOSN 1.0 发布,开启新架构演进

MOSN 是一款主要使用 Go 语言开发的云原生网络代理平台,由蚂蚁集团开源,经过双 11 大促几十万容器的生产级验证。 经过 4 年的蓬勃发展,在 11 位 commiter,100 多个 contributor 和整个社区的共同努力下,经历 27 个小版本的迭代,MOSN 1.0 版本正式发布了。

蚂蚁金服技术团队 590

HTNN 开源 - MOSN 社区新网络产品

HTNN 是 MOSN 社区基于 MoE(MOSN on Envoy)架构开源的新产品,我们将通过系列文章来展开介绍,本文作为第一篇,先简要的概览介绍,欢迎大家一起进群交流。GitHub:https://github.com/mosn/htnn1HTNN 是什么HTNN(Hyper Trust-Native Network)是一款基于云原生技术的 L3 & L4 & L7 Cro...

金融级分布式架构 387
上一篇: 议程更新 | Occlum Meetup 北京站--一起来聊机密计算 TEE
下一篇: SOFA Weekly|SOFAArk 会议预告、社区本周贡献 & issue 精选
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值