1.腾讯T2I-adapter源码分析(2)-推理源码分析
2.腾讯T2I-adapter源码分析(1)-运行源码跑训练
3.OpenAI/Triton MLIR 第零章: 源码编译
4.OpenAI 开源的技术技术解析免费 AI 语音转文字工具 - Whisper,一步一步本地部署运行
5.AI网络爬虫:批量下载微信公众号文章中的源码源码音频
6.AI编译器技术剖析(二)-传统编译器
腾讯T2I-adapter源码分析(2)-推理源码分析
随着stable-diffusion和midjourney展示出AI绘图的惊人潜力,人们对技术进步的技术技术解析惊叹不已。然而,源码源码AI绘图的技术技术解析可控性一直是痛点,仅凭描述词控制图像并不尽如人意。源码源码冰糖溯源码燕窝知识为增强AI图像的技术技术解析可控性,Controlnet和T2I-adapter等技术应运而生。源码源码本文将通过解析T2I-adapter的技术技术解析推理源码,揭示其工作原理。源码源码
本文将深入剖析推理部分的技术技术解析代码,以便理解T2I-Adapter的源码源码实际操作。使用如下的技术技术解析命令行指令进行推理,如test_adapter.py,源码源码它需要指定条件类型、技术技术解析深度图路径、前置处理器类型、提示语、模型和缩放尺寸等参数。
在test_adapter.py中,主要分为参数读取、模型加载和推理运算三个步骤。参数读取部分包括检查支持的条件、构建提示语,以及根据输入选择前置处理。模型加载涉及stable-diffusion和adapter模型,前者通过配置加载,后者根据输入条件构造Adapter模型。
加载stable-diffusion模型时,代码引用了来自github的CompVis/stable-diffusion库,其中关键部分包括加载参数、模型配置以及UNetModel的改动。Adapter模型的构造与论文中的结构图一致,通过ResnetBlock的组合实现。
在推理过程中,先对输入进行预处理,如深度图的处理。随后,get_adapter_feature和diffusion_inference两个核心函数调用adapter模型,与stable-diffusion模型结合进行特征融合和采样。最后,DDIM采样器接收并处理adapter特征,最终生成图像。
通过以上分析,我们逐步揭示了T2I-adapter的推理机制。后续文章将探讨训练代码。在游戏开发中,红角鸮源码45源码专精AI生成游戏角色动作的应用,如AUTOMATIC,展示了这种技术的实际应用,以解决美术资源匮乏的问题。
腾讯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,可以看到依赖项的内容。然后下载示例,下载的qq裂变源码强制分享源码会放到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是对应的文本描述。
文本描述如下,卖赌博源码的网站源码都只是为了把代码跑起来而做的简单设置。设置环境变量,由于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等技术,我们也分析了它的源码实现,写了一系列文章。
OpenAI/Triton MLIR 第零章: 源码编译
本文旨在深入探讨开源AI项目OpenAI Triton MLIR,着重介绍Triton作为编程语言与编译器在GPU加速计算领域的应用与优化。Triton为用户提供了一种全新的方式,通过将其后端接入LLVM IR,小程序源码(带后台源码)利用NVPTX生成GPU代码,进而提升计算效率。相较于传统CUDA编程,Triton无需依赖NVIDIA的nvcc编译器,直接生成可运行的机器代码,体现出其在深度学习与数据科学领域的高性能计算潜力。Triton不仅支持NVIDIA GPU,还计划扩展至AMD与Intel GPU,其设计基于MLIR框架,通过Dialect支持多样化后端。本文将从源码编译角度出发,逐步解析Triton的设计理念与优化策略,为研究编译技术和系统优化的工程师提供宝贵资源。
首先,需要访问Triton的官方网站,克隆其官方代码库,以便后续操作。构建过程涉及两个重要依赖:LLVM与pybind。LLVM作为Triton的核心后端,通过将高级Python代码逐步转换至LLVM IR,最终生成GPU可运行代码,体现了其在计算优化领域的优势。pybind组件则用于封装C++/CUDA或汇编代码,实现Python DSL与高性能组件的无缝集成。
接下来,将LLVM与pybind分别编译安装,通过手动配置指定路径,确保编译过程顺利进行。LLVM的安装对于基于Triton进行二次开发的工程师和研究人员至关重要,因为它为Triton提供了强大的计算基础。在特定的commit ID下编译Triton,确保与后续版本兼容。
在编译过程中,配置pybind同样至关重要,它允许用户通过Python API调用高性能组件,实现自动化生成高性能算子。完成编译后,生成的.so文件(libtriton.so)为后续Triton的Python接口提供了支持。
将libtriton.so移动至triton/python/triton/_C目录下,确保Python路径正确配置,实现无缝导入与调用。通过简单的import triton命令,即可开启Triton的开发之旅。验证Triton性能,可以选择tutorials目录下的示例代码,如-matrix-multiplication.py,通过运行该脚本,观察Triton在GPU上的性能表现。
Triton在NVGPU上的成熟映射路线,从抽象的Python DSL到贴近GPU层面的IR,最终生成高效机器代码,体现了其在高性能计算领域的优越性。Triton未来的发展蓝图将支持更多前端语言,对接不同硬件厂商的硬件,实现高效映射,满足多样化计算需求。
OpenAI 开源的免费 AI 语音转文字工具 - Whisper,一步一步本地部署运行
OpenAI 推出的开源免费工具 Whisper,以其出色的语音识别功能吸引了不少关注。这款模型不仅能够进行多语言的语音转文本,还能进行语音翻译和语言识别,实用价值极高。市面上许多语音转文字服务如讯飞语记等都收费,而Whisper作为开源选择,无疑是一个经济实惠且性能强大的解决方案。
想在本地体验Whisper,首先需要为Windows设备安装ffmpeg和rust。ffmpeg可以从ffmpeg.org下载并配置环境变量,而rust则可以从rust-lang.org获取并确保命令行可用。接着,创建一个python虚拟环境,安装Whisper所需的依赖库。
运行Whisper的过程相当直接。通过命令行,只需提供音频文件如"Haul.mp3",并指定使用"medium"模型(模型大小从tiny到large递增)。首次运行时,Whisper会自动下载并加载模型,然后开始识别并输出文本,同时将结果保存到文件中。如果想在Python代码中集成,也相当简单。
如果你对此技术感兴趣,不妨亲自尝试一下。项目的源代码可以在github.com/openai/whisper找到。这不仅是一次AI技术的体验,还可能开启语音转文字的新篇章。更多详情可参考gpt.com/article/的信息。
标签推荐:#AI技术 #OpenAI开源 #Whisper模型 #语音转文字 #ChatGPT应用
AI网络爬虫:批量下载微信公众号文章中的音频
AI网络爬虫技术可以高效地批量下载微信公众号文章中的音频文件。以一个具体示例的URL(mp.weixin.qq.com/s/Xcrr...)为例,通过开发者工具查看网络请求,音频文件的地址规律为 res.wx.qq.com/voice/get...,其中最后一串字符不同。要编写Python脚本实现这个任务,首先用户需要输入文章的网页链接,程序会解析URL并定位class="js_editor_audio res_iframe js_uneditable custom_select_card" 的mp-common-mpaudio标签,提取出音频文件名(去除空格)和voice_encode_fileid用于构造下载URL。下载的音频将以mp3格式保存在E盘的"weixinaudio"文件夹中。
以下是实现步骤的源代码片段:
开始下载
这个脚本通过用户输入的URL,解析音频标签,下载音频,并将其保存到指定路径。每一步骤都有相应的输出信息,确保下载过程的透明性。
AI编译器技术剖析(二)-传统编译器
AI技术的广泛应用中,智能家居和自动驾驶都依赖于NLP和计算机视觉等AI模型,这些模型部署在云、专用设备和物联网设备中。在将AI模型从研发到实际应用的过程中,编译器的作用日益凸显,特别是在处理非标准算子的模型部署上。AI编译器的兴起预示着未来十年的快速发展。
AI编译器技术建立在传统编译器的基础之上。它首先在IR层面优化模型,然后通过lowering将高级IR转换为传统编译器理解的低级IR,最后依赖传统编译器生成机器码。要理解AI编译器,先要掌握传统编译器的基本原理,包括其预处理、编译和链接流程,以及前端、优化器和后端的分工。
传统编译器的核心是源代码到机器码的转换过程。它通常由预处理器、编译器(分前端、优化器和后端)和链接器组成。编译器负责将高级语言转换为机器代码,而解释器则在运行时进行转换。AOT和JIT编译的区别在于执行时间:AOT在编译前完成,JIT则在运行时动态优化。
主流编译器如GCC,其源代码庞大且复杂,包含语言相关的代码、通用代码和根据机器描述生成的代码。GCC的流程包括词法分析、语法分析、优化,以及目标代码生成。而LLVM提供了一种模块化的编译器框架,支持自定义前端和后端,比如Apple的Clang,它直接支持C++等语言并转化为LLVM IR。
编译器优化是提升性能的关键,包括常量传播、常量折叠、复写传播等。它们通过消除冗余计算和改进代码结构来提高执行效率。例如,通过公共子表达式消除,可以避免不必要的计算;通过函数调用优化,如尾递归优化,减少函数调用的开销。
总的来说,本文概述了传统编译器的基础,以及AI编译器如何在其基础上发展,展示了编译器的架构、优化策略和不同编译器工具的特性,为理解AI编译器技术提供了基础。
阿尔法元之五子棋源码解读(AlphaZero-Gomoku)
阿尔法元在五子棋领域的源码解析揭示了强化学习在简单游戏中的深度应用。相较于围棋,五子棋虽简单,但其源码分析同样能让我们深入理解强化学习的原理。AlphaZero,最初凭借阿尔法狗的深度学习技术,后在没有人类干预的情况下,通过三天自学围棋并超越前辈,展现了人工智能的新里程碑。
本文着重探讨AlphaZero在五子棋上的具体应用,源码可在GitHub上获取,路径公开。理解该项目的前提是对强化学习有一定基础,如马尔可夫决策过程和蒙特卡洛方法。项目主要包含策略价值网络、蒙特卡洛树搜索算法和训练脚本,它们共同构建了强化学习与深度学习的交互过程。
项目的架构包括游戏处理、MCTS算法实现、策略价值网络训练以及人机对战脚本。Game.py定义了棋盘和游戏逻辑,mcts_alphaZero.py与mcts_pure.py则是MCTS玩家的实现,分别对应AlphaZero和纯MCTS版本。policy_value_net.py负责网络模型,根据不同框架实现,如Tensorflow或Pytorch。train.py则实现了AlphaZero的训练流程,通过模拟对弈和数据增强来优化网络。
运行项目,你可以通过human_play.py与预训练的AI对战,感受强化学习的力量。源码剖析中,human_play.py脚本的核心是创建棋盘、玩家,并通过循环进行人机对弈,直到游戏结束。
AI驱动的前端UI组件生成器(Next.js,GPT4,Langchain和CopilotKit)
构建AI驱动的前端UI组件生成器,以帮助您生成Next.js Tailwind CSS UI组件,是一个兼具高效与便捷的开发方法。本教程将引导您通过几个关键步骤,构建一个集成有AI功能的UI组件生成器,从项目设置与包安装,到前端界面设计与AI功能集成,最终实现生成及使用UI组件的全过程。以下内容将具体介绍如何完成这一构建过程。
首先,确保您的开发环境已准备就绪。为了能充分理解接下来的教程,您需要对React或Next.js有基本了解。本项目将利用Ace代码编辑器、Langchain包及其依赖项,以及CopilotKit工具。您需要在终端中运行以下代码片段以创建Next.js应用程序:`bash npx create-next-app@latest aiuigenerator`。接下来,安装Ace、Langchain及其依赖,以及CopilotKit,这将为添加AI功能做好准备。
在项目结构中,我们将创建一个名为`components`的文件夹,并在其中包含`Header.tsx`与`CodeTutorial.tsx`两个文件。`Header.tsx`负责定义导航栏,`CodeTutorial.tsx`则展示生成的UI组件、嵌入式代码编辑器及实现教程。在`page.tsx`文件中,导入并定义`Home`函数组件,用于整合`Header`和`CodeTutorial`组件。在完成上述步骤后,删除`globals.css`中的CSS代码,并添加自定义CSS以优化界面外观。运行`npm run dev`命令,然后访问`http://localhost:/`,以预览UI组件生成器的前端界面。
接下来,我们将利用CopilotKit将AI功能集成到组件生成器中。CopilotKit提供了前端与后端包,允许您通过React状态与AI代理进行互动。首先,在`CodeTutorial.tsx`中导入`useMakeCopilotReadable`和`useCopilotAction`自定义钩子。在`CodeTutorial`内部,使用这些钩子设置上下文与生成代码及教程的动作。这将允许通过应用内聊天机器人进行交互,以生成UI组件代码和实现教程。
在`page.tsx`文件中,导入CopilotKit前端包,并将`CopilotSidebar`与`CodeTutorial`组件集成,以实现在前端展示生成的代码与教程。通过配置CopilotKit后端端点与聊天机器人,您能够利用AI代理处理请求,生成代码并提供教程。此外,集成Tavily AI代理,以进行在线主题研究。
配置完后端服务,通过在终端中运行命令并访问`http://localhost:`,您将能体验到AI驱动的UI组件生成器功能。通过应用内聊天机器人提示生成特定组件,如“生成一个联系表单”,生成的代码与教程将立即呈现于界面上,您可直接在嵌入式代码编辑器中进行调整。
至此,您已成功构建了一个AI驱动的前端UI组件生成器。CopilotKit的集成使得AI功能变得触手可及,极大地提升了开发效率。这一构建过程不仅展示了AI在软件开发领域的强大应用,也为未来的项目集成提供了灵感与参考。通过GitHub链接,您可以访问完整的源代码,深入了解实现细节。在AI技术的驱动下,未来的开发流程将更加智能化与高效。