封面照片由 Jason Leung 在 Unsplash 上拍摄
这可能是许多“我为什么制作”帖子中的第一篇,它解释了我制作一款软件并深入研究未来改进的原因。
今天,我将重点关注我最受欢迎的项目 TabbyAPI。 TabbyAPI 是一个基于 Python 的 FastAPI 服务器,允许用户使用 ExllamaV2 库与大型语言模型(或 LLM)交互,并遵守 OpenAI API 规范。
如果您不确定这些词的含义,那么您就不在人工智能领域。但是,没关系!这篇文章的目的是解释我的经历,而不是将整个厨房水槽的人工智能术语扔给你。
让我回到 2023 年 11 月。人工智能蓬勃发展,公司纷纷发布模型,炒作列车似乎没有尽头。好像我说的是远古时期,但那时的每一天都感觉像是一整月的创新。
在这些新技术的冲击下,我专注于用我那微不足道的 3090ti 来运行它们。是的,“微不足道”这个词是正确的,因为显卡中的 24GB VRAM 对于运行大多数 AI 模型来说是入门级的。此时,运行模型的量化版本已成为常态。量化类似于压缩,允许用户在消费级 GPU 上运行这些大型模型。
我越来越喜欢的格式是 exl2,这种格式专注于速度、优化以及尽可能多地使用显卡。代币以音速生成。所以这个格式很棒!有什么问题吗?
问题是运行模型。 Exl2 是 ExllamaV2 库的一部分,但要运行模型,用户需要 API 服务器。唯一的选择是使用 text-generate-webui (TGW),该程序将每个加载器捆绑到 Gradio webui 中。 Gradio 是一种用于 Python 开发的常见“构建块”UI 框架,通常用于 AI 应用程序。这个设置一度不错,但后来就不行了。
本质上,创造Tabby的主要原因是烦恼。我对加载一个模型所需的工作量感到厌倦。更不用说 Gradio 的开销和 TGW 的大量依赖项。我尊重开发人员,但虽然 TGW 对于许多想要一体化解决方案的人来说有好处,但对我来说却不好。
照片由 Glenn Carstens-Peters 在 Unsplash 上拍摄
很简单。创建一个可以位于我的计算机上并且不需要大量臃肿的程序来运行的 API 服务器。听起来很简单,但我真的能做到吗?我在 AI 模型理论方面没有太多经验,但在创建后端服务器和理解 API 设计方面有很多经验。
因此,我需要有人帮忙,但是谁呢?进入turboderp,ExllamaV2 背后的人。自从他创建了这个库以来,他几乎了解模型如何工作背后的一切,这与我的 API 知识非常匹配。此外,另一位名叫 Splice 的感兴趣者由于他使用 Python 的经验也加入了。我们三个人一起创建了 TabbyAPI。
但是计划真的那么简单吗?嗯,有点。虽然我有适合这项工作的人员,但我对 Python 和 API 服务器的知识基本上是 0。我最终使用了一个名为 FastAPI 的网络服务器框架,这让我的生活变得更加轻松。它在 python 社区中也很受欢迎,并且有很好的文档记录。
使用 FastAPI 几天后,我迷上了编写 Python Web 服务器代码。文档非常好,网上有很多示例,开发人员很乐意接受反馈。总的来说,社区很受欢迎,我很乐意更频繁地使用 python 进行网络连接。
几周后,我觉得一切都已准备好公开部署,并决定以我所知道的最佳方式发布所有内容。 YOLO 并将所有内容推送到 GitHub。
当向世界发布开源项目时,预计会出现问题……很多问题。人们总是有实用程序不适合的用例。由于 Tabby 是后端服务器,因此出现了很多这样的情况。在这篇文章中,我只会提到一些一开始对我来说很难处理的事情。
一个很大的痛点是我在 RAG 炒作周期的中间发布了 Tabby。 RAG 代表“检索增强生成”,即在获得回复时除了法学硕士知识之外还使用外部文档。问题是这些新技术(例如函数调用)需要完全不同的 API 端点和方法来完成任务。
最重要的是,几乎没有关于这些功能如何在后端实际工作的文档。直到今天,我还没有实现 OpenAI 的工具调用,因为我不知道它是如何工作的。可悲的是,缺乏文档在人工智能世界中很常见,它限制了开发人员在没有事先收集大量信息的情况下在项目中实现代码的能力。
另一个持续了几个月的问题是多用户生成。事实证明,对于开发人员来说,处理服务器上的分布式查询并不是一个容易处理的主题。 FastAPI 为此类工作负载提供支持,但 Tabby 是用同步代码编写的。这意味着我必须学习 Python 异步编程(这绝对不容易)。
最糟糕的是,人工智能开发人员不喜欢异步Python,而网络服务器却接受它。这意味着我必须学习如何以线程的形式在异步和同步库之间进行通信。这是更深入地了解 Python 的线程问题以及异步模型存在的原因。我将在另一篇博文中详细介绍所有这些内容,但希望这能解释我在 2-3 个月内应对这些问题时必须完成的学习量。
最终,turbo 和我一起在 ExllamaV2 库中创建了一个更好的生成器,消除了线程库中的所有多用户问题和奇怪的错误。 9 个月后,可以肯定地说,Tabby 终于成为一个运行模型的稳定程序。
照片由 Annie Spratt 在 Unsplash 上拍摄
在我开发软件的整个过程中,我从未经历过倦怠期。这很难相信,因为倦怠在软件世界中是很常见的事情,但在过去的 6 年里我一直想编写一些东西。编码是我最喜欢的消遣,可以帮助我逃避一天的压力。
然而,Tabby 和人工智能社区总体上改变了一切。一开始,我结交了很多朋友,他们在探索蓬勃发展的人工智能领域有着共同的兴趣。我的社区过去几乎每天都会进行语音通话,并专注于分享有关该领域新事物的项目和想法。它让开发变得有趣和愉快,因为我可以与志同道合的人一起出去玩并分享新想法。
不幸的是,这些语音通话的人数开始减少,而且发生的频率也越来越低。由于完成医学院第一年的学业,我也承受着很大的压力。在网络世界中,这对我来说是一段巨大的孤独时期,而正在发育的塔比感觉就像是我医学生生活的负担。最终,这些事件以巨大的挫败感和疲惫感达到了顶峰。为了解决这个问题,我决定无限期地脱离人工智能。
在休息期间,我离开了Tabby,花更多的时间享受我的暑假。实际上,我参与了一些较旧的 iOS 应用程序项目,并与家人共度时光。如今,我又重新开始开发 Tabby。由于人工智能炒作的消退,我以前参与的那些语音通话可能在很长一段时间内不会发生。这是一颗难以下咽的药丸,但我找到了继续开发的不同动机。
Tabby 是我做过的第一个法学硕士项目。它不知何故在社区中成为了一个流行的名字,我也因此陷入了管理的深渊。了解了这一点,以下是我从这次经历中学到的一些想法。
知道你想迎合谁:任何人都可以使用开源项目。对于 Tabby,我优先考虑有利于项目的易用性、我的朋友和我自己的功能。通过控制这一理念,我可以管理我的日程安排,并且知道要处理哪些功能。
了解你的极限:倦怠并不好玩。不要像我一样,因为用户无数次遇到问题而让自己陷入困境。如果出现沮丧、愤怒或无聊的感觉,请休息一下。偶尔放松一下也不错。
不要为每个人都竭尽全力:一个想法在第一次提出时可能看起来不错,但人们不明白开发人员需要在之后维护这个功能。如果它很痛苦并且不经常使用,那么该功能就不会得到维护,并将成为技术债务。请记住,互联网上的随机陌生人总是有想法。由您或您的团队决定向哪些项目投入脑力。
创造你喜欢和享受的东西:开发人员经常会失去对项目的兴趣,因为维护可能很麻烦并且需要很长时间。如果开发人员不再积极使用该项目,则尤其如此。弄清楚你的动机是什么,如果它改变了,那也没关系。
我可能会在另一篇文章中详细阐述这些,因为这可能是它自己的主题,但我觉得在 Tabby 上工作让我对我希望我的项目如何工作有了更多的了解。另外,我对开源社区的了解也得到了扩展。
我感谢所有每天为改进 TabbyAPI 和 ExllamaV2 做出贡献并提出建议的人们。每个人都帮助完善和改进程序,以便更好地用于一般用途。我是一个人,帮助别人会减轻我的负担。
在可预见的未来,我将减少在 Tabby 上的工作量。该项目仍在顺利进行,许多人都致力于改进它,但我的心理健康更重要,休息会有所帮助。
感谢您阅读这篇回顾展。如果您想了解更多关于我和我所做的事情,请访问 kingbri.dev。
Brian Dashore 的个人网站
重要的
除了自述文件之外,请阅读 Wiki 页面以获取有关入门的信息!
笔记
需要帮助吗?加入 Discord 服务器并获得 Tabby 角色。提问时请保持礼貌。
基于 FastAPI 的应用程序,允许使用 Exllamav2 后端使用 LLM(大语言模型)生成文本
该项目被标记为滚动发布。后续可能会出现错误和更改。请注意,如果需要,您可能需要重新安装依赖项。
TabbyAPI 是一个仅供少量用户使用的业余爱好项目。它不适合在生产服务器上运行。为此,请查看支持这些工作负载的其他后端。
重要的
本自述文件不适用于入门。请阅读维基百科。
阅读 Wiki 了解更多信息。它包含面向用户的安装、配置、采样、API 使用等文档。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3