1.关于vpp中dpdk接口注册流程解析
2.腾讯T2I-adapter源码分析(1)-运行源码跑训练
3.有没有免费的旁路旁路上网行为管理系统和软路由系统推荐。
关于vpp中dpdk接口注册流程解析
vpp 是分析一个高效的包处理转发框架,支持多种接口类型,源码其中应用最广泛的系统便是 dpdk。dpdk 通过接管网卡驱动实现内核旁路,基本提供报文收发加速机制。类型益学堂机构控盘指标源码在 vpp 中,旁路旁路dpdk 作为插件实现,分析通过 make install-ext-deps 构建过程中自动集成 dpdk。源码
dpdk 初始化在 /src/plugins/dpdk/device/init.c 文件中,系统dpdk 的基本 eal 环境通过调用 rte_eal_init 函数实现。dpdk_config 函数负责参数解析,类型dpdk_config 函数通过宏 VLIB_CONFIG_FUNCTION 注入,旁路旁路vpp 启动时自动调用,分析将参数传递给 rte_eal_init 进行初始化。源码
vpp 的接口层分为硬件层和软件层,硬件层通过 device class 描述硬件驱动,软件层通过 interface class 描述链路层。硬件设备用 vnet_hw_interface_t 结构体描述,软件层接口用 vnet_sw_interface_t 描述。接口统一管理在 vnet_interface_main_t 结构体中,该结构体定义了硬件接口和软件接口的数组。
接口初始化在 vnet_interface_init 函数中进行,此函数除了初始化接口参数,还会将 dpdk 设备的 tx_function 赋值给 device class,决定后续的发包执行函数。
dpdk 接口初始化在 dpdk_lib_init 函数中完成,主要步骤包括初始化 dpdk_device_t 结构体,调用 ethernet_register_interface 注册接口,配置网卡参数,并为接口分配收包线程。
dpdk 收包通过 input node dpdk_input_node 实现,dpdk_device_input 函数完成实际的收包操作,通常将报文传递给下一个 node,如 ethernet_input node。
dpdk 发包逻辑相对复杂,dpdk 的发包并未直接在插件中实现专门的 output node,而是通过接口 tx_function 赋值,最终在 vpp 的发送流程中实现。在发送报文时,php截取源码接口的 output node 和 tx node 会在 vnet_register_interface 注册接口时一同注册,其中 output node 的执行函数是 vnet_interface_output_node,tx node 的函数则由 vnet_device_class_t 定义。
发送流程以 ip4 报文为例,处理完 ip4 报文后,通常下一个节点为 ip4-lookup 进行路由查找。在 interface-output node 中,通过 buffer->sw_if_index[VNET_TX] 的值确定发送接口,并执行对应的 output node。
在 interface output node 的执行函数中,接口的 output node index 通过调用 vnet_per_buffer_interface_output_hw_interface_add_del 函数获得,该函数在 vpp 初始化过程中将接口的 output node 放置在 interface output node 后面,从而在执行函数中获取到接口 output node 的索引。
vpp 的设计遵循分层架构,逻辑清晰,但宏定义的大量使用增加了阅读难度。 版本源码调整了 node 注册方式,通过 VLIB_NODE_FN 宏实现不同优先级的 function 设置,但这一改动也给源码阅读带来不便。接口发送节点通过 vlib_register_node 函数定义,允许不同驱动共享一个函数,方便了接口的动态添加。
vpp 启动过程中的宏定义执行顺序影响代码结构,后续深入阅读源码时会进一步分析。如有需要,可参考相关学习资料、教学视频和交流群资源进行深入学习和交流。
腾讯T2I-adapter源码分析(1)-运行源码跑训练
稳定扩散、midjourney等AI绘图技术,为人们带来了令人惊叹的效果,不禁让人感叹技术发展的日新月异。然而,AI绘图的可控性一直不是很好,通过prompt描述词来操控图像很难做到随心所欲。为了使AI绘制的图像更具可控性,Controlnet、T2I-adapter等技术应运而生。本系列文章将从T2I-adapter的源码出发,分析其实现方法。免越狱源码
本篇是第一篇,主要介绍源码的运行方法,后续两篇将以深度图为例,分别分析推理部分和训练部分的代码。分析T2I-Adapter,也是为了继续研究我一直在研究的课题:“AI生成同一人物不同动作”,例如:罗培羽:stable-diffusion生成同一人物不同动作的尝试(多姿势图),Controlnet、T2I-adapter给了我一些灵感,后续将进行尝试。
T2I-Adapter论文地址如下,它与controlnet类似,都是在原模型增加一个旁路,然后对推理结果求和。
T2I-Adapter和controlnet有两个主要的不同点,从图中可见,其一是在unet的编码阶段增加参数,而controlnet主要是解码阶段;其二是controlnet复制unit的上半部结构,而T2I-Adapter使用不同的模型结构。由于采用较小的模型,因此T2I-Adapter的模型较小,默认下占用M左右,而controlnet模型一般要5G空间。
首先确保机器上装有3.6版本以上python,然后把代码clone下来。随后安装依赖项,打开requirements.txt,可以看到依赖项的内容。然后下载示例,下载的会放到examples目录下。接着下载sd模型到model目录下,再下载T2I-Adapter的模型到目录下,模型可以按需到huggingface.co/TencentA...下载。这里我下载了depth和openpose。sd模型除了上述的v1-5,也还下载了sd-v1-4.ckpt。
根据文档,尝试运行一个由深度图生成的例子,下图的软件有源码左侧是深度图,提示语是"desk, best quality, extremely detailed",右侧是生成出来的。运行过程比较艰辛,一开始在一台8G显存的服务器上跑,显存不够;重新搭环境在一台G显存的服务器上跑,还是不够;最后用一台G显存的服务器,终于运行起来了。
接下来尝试跑openpose的例子,下图左侧是骨架图,提示词为"Iron man, high-quality, high-res",右侧是生成的图像。
既然能跑推理,那么尝试跑训练。为了后续修改代码运行,目标是准备一点点数据把训练代码跑起来,至于训练的效果不是当前关注的。程序中也有训练的脚步,我们以训练深度图条件为例,来运行train_depth.py。
显然,习惯了,会有一些问题没法直接运行,需要先做两步工作。准备训练数据,分析代码,定位到ldm/data/dataset_depth.py,反推它的数据集结构,然后准备对应数据。先创建文件datasets/laion_depth_meta_v1.txt,用于存放数据文件的地址,由于只是测试,我就只添加两行。然后准备,图中的.png和.png是结果图,.depth.png和.depth.png是深度图,.txt和.txt是对应的文本描述。
文本描述如下,都只是为了把代码跑起来而做的简单设置。设置环境变量,td分时源码由于T2I-Adapter使用多卡训练,显然我也没这个环境,因此要让它在单机上跑。而代码中也会获取一些环境变量,因此做简单的设置。
做好准备工作,可以运行程序了,出于硬件条件限制,只能把batch size设置为1。在A显卡跑了约8小时,完成,按默认的配置,模型保存experiments/train_depth/models/model_ad_.pth。那么,使用训练出来的模型试试效果,能生成如下(此处只是为了跑起来代码,用训练集来测试),验证了可以跑起来。
运行起来,但这还不够,我们还得看看代码是怎么写法,下一篇见。
PS:《直观理解AI博弈原理》是笔者写的一篇长文,从五子棋、象棋、围棋的AI演进讲起,从深度遍历、MAX-MIN剪枝再到蒙特卡罗树搜索,一步步介绍AI博弈的原理,而后引出强化学习方法,通俗易懂地介绍AlphaGo围棋、星际争霸强化学习AI、王者荣耀AI的一些强化学习要点,值得推荐。
AUTOMATIC的webui是近期很流行的stable-diffusion应用,它集合stable-diffusion各项常用功能,还通过扩展的形式支持controlnet、lora等技术,我们也分析了它的源码实现,写了一系列文章。
有没有免费的上网行为管理系统和软路由系统推荐。
路由系统、又称RouterOS,已经是一个非常开源的技术了。不管是在LINUX系统上的,还是在windows系统上的,都很很多这样的开源项目,技术简单,结构也非常单一。而随着时代发展,后期又加上了***和基础的包过滤防火墙,也都是开源成熟的项目。大部分厂家也是在这些项目上修修改改,包装包装打造成一个商业产品销售给用户。(当然产品的商业价值和技术价值也没有啥可比性)。但是近十年来,随着上网行为管理需求的迅猛发展,从网页过滤到协议过滤,以及内网安全的需要。单纯的路由系统已经不能满足用户的需要,很多的路由器网关都开始带有上网行为管理和防火墙模块,第二代防火墙(Next
Generation
Firewall)的概念也应运而生。但是真正做到第二代防火墙的厂家不多,很多路由厂商也乱入,但是效果怎么样,各家都有一说。
今天介绍的是国内外几款免费的上网行为管理系统、防火墙和路由系统。以免费的为主,因为是免费的,所以多少有缺憾,要么是功能,要么是授权数。待我慢慢道来。
1. PFsense
一个老牌的opensource的防火墙系统,官网地址大家自己找,软件免费,硬件收费。
系统的特点是路由和防火墙功能比较强大,而且集成了入侵检测、漏洞扫描等模块,当然路由和限速这些基础功能都是妥妥的。缺点是上网行为管理功能比较薄弱,不能进行应用过滤和网址库过滤。众所周知,国外的软件,界面很复杂。照老外的说法,没个degree,都不好意思去配置。
另外,PFsense还有收费培训和服务,也可以直接买他们的硬件,价格还算适中。产品也是开源的,源码都公开了。(语言好像已经有了中文版,但是不确定,我的信息来自他们官网)良心产品,靠服务和硬件生存,没有License限制,也没有功能限制。
2. Routeros
路由系统的先锋了,号称路由系统占有率第一位。出自东欧的小国家,所以价格很低廉,市场上充斥了很多破解版,其实正版价格已经很低廉了(可以低到忽略价格)。
只是不是我们国家本土产品,可能服务跟不上。ROS系统几乎没有什么升级维护的工作,系统很稳定,只要上网方式没有什么革命性的更改,那就一直能用。
ROS的路由功能大概是全世界研究的最彻底的了,缺点就是界面狂复杂,它的配置完全可以在大学开一门功课。在西方和东南亚非常受欢迎,各种技术讨论论坛也异常火爆。就是配置复杂的有点扯蛋了。
总体来说,是个好产品,对于网吧、小区宽带这种宽带运营的网络用着蛮好。缺点是没有网页过滤、应用过滤这些上网行为管理的功能,只有基础防火墙模块。也可以限速,路由功能和***做的很稳定。网管一旦掌握,也是把利器。
3. Sophos
这个是个全球化的产品,大厂家,大品牌。家庭版本是免费的,支持用户。路由、***、防火墙模块,尤其是防御功能、网关杀毒这块做的很好,也有协议过滤模块和网址库过滤。软件和硬件都可以提供。优势还是在杀毒和防火墙。欧洲的安全老厂家,价格不用想,不在天上也在云端。
4. Untangle
十年以上的老产品了。重点是上网行为管理和防火墙、杀毒功能。家庭版本$一年,用户。(别指望家庭版本可以用在企业里,他们号称可以检测到是什么环境在用,一旦违规会停掉了,估计软件里面有什么检测工具啥的)。软件和硬件都可以提供。
不过价格就算对于美国本土用户,也是非常昂贵的。硬件销售是硬件的价格加上软件价格,软件价格那是天上的价格,服务也一般。
产品扎实,各种协议管理,网络安全,路由模式,防火墙模块,杀毒都有。除了价格以外(用户的软件License,一年近刀),对于企业选择全方位专业的上网行为管理网关和下一代防火墙,真的是个好选择。
5. WFilter-NGF
也是十年以上的老产品了,本土研发,走国际路线,国内市场推广能力不强,用户大部分在国外。专门研究网络监控和协议分析。专注上网行为管理功能,在Web过滤和协议过滤等上网行为管理的方面做的很扎实。产品的界面有点类似上面的untangle。缺点是没有网关杀毒和主动防御功能。服务不错,有问必答,还可以远程协助配置。软件和硬件方案都可以提供。他们的公司名字非常有趣,值得一提的是,WFilter还有windows的旁路上网行为管理软件。不想添加硬件的话,是上网行为管理的一个可选方案。价格中等吧,性价比高。用户全功能免费,对于人以内的小企业来说,个人觉得是不二之选。
5. 爱快路由系统
本土产品,软件全免费,靠卖硬件挣钱。免费版本各种坊间传闻都有,就不一一表了。基本的路由功能都有,不过上网行为管理做的比较鸡肋。爱快的系统个人认为比较偏向做局域网无线部署方案。企业管理这块不怎么来事。但是好在系统是免费的,这个比较受欢迎。
6. 国内还有维盟,海蜘蛛,和爱快也都是大同小异,还有一家pandbit,侧重流控的路由系统,就不一一介绍了,仁者见仁。
总结一下,分为“路由系统”和“上网行为管理/防火墙系统”两大系列。如果只是要做路由,那么ROS从性能,稳定性上真的很不错的选择。如果是企业用上网行为管理和下一代防火墙;语言没有问题的话,可以看看untangle和sophos以及WFilter-NGF;追求中文版的话,那么WFilter-NGF一定是个最好的选择。
还有一点要说一下:路由系统,比如ROS差不多是一个一次性软件了,买了就直接用了,几乎不需要升级和更新。但是上网行为管理的“协议过滤”和“网址库过滤”,都是需要升级服务的,这就是为什么很多上网行为管理软件按年收费,国内大品牌的上网行为管理设备后续还要每年收服务费的原因。如果选择上网行为管理产品,一定要考虑后续服务的质量和费用。
2024-11-27 08:33
2024-11-27 08:12
2024-11-27 07:03
2024-11-27 06:42
2024-11-27 06:15
2024-11-27 06:08