Unsplash 上 Jason Leung 的封面照片
這可能是許多「我為什麼製作」貼文中的第一篇,它解釋了我製作一款軟體並深入研究未來改進的原因。
今天,我將重點放在我最受歡迎的項目 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 和 AI 社群整體上改變了一切。一開始,我結交了許多朋友,他們在探索蓬勃發展的人工智慧領域有著共同的興趣。我的社群過去幾乎每天都會進行語音通話,並專注於分享有關該領域新事物的項目和想法。因為我可以與志同道合的人一起出去玩並分享新想法,所以開發變得有趣和愉快。
不幸的是,這些語音通話的人數開始減少,而且發生的頻率也越來越低。由於完成醫學院第一年的學業,我也承受著很大的壓力。在網路世界中,這對我來說是一段漫長的孤獨時期,而正在發育的塔比感覺就像是我醫學生生活的負擔。最終,這些事件以巨大的挫敗感和疲憊感達到了頂峰。為了解決這個問題,我決定無限期地脫離人工智慧。
在休息期間,我離開了Tabby,花更多的時間享受我的暑假。實際上,我參與了一些較舊的 iOS 應用程式項目,並與家人共度時光。如今,我又重新開始開發 Tabby。由於人工智慧炒作的消退,我以前參與的那些語音通話可能在很長一段時間內不會發生。這是一顆難以下嚥的藥丸,但我找到了繼續開發的不同動機。
Tabby 是我做過的第一個 LLM 專案。它不知何故在社區中成為了一個流行的名字,我也因此陷入了管理的深淵。了解了這一點,以下是我從這次經驗中學到的一些想法。
知道你想迎合誰:任何人都可以使用開源專案。對於 Tabby,我優先考慮有利於專案的易用性、我的朋友和我自己的功能。透過控制這個理念,我可以管理我的日程安排,並且知道要處理哪些功能。
了解自己的極限:倦怠並不好玩。不要像我一樣,因為用戶無數次遇到問題而讓自己陷入困境。如果出現沮喪、憤怒或無聊的感覺,請休息一下。偶爾放鬆一下也不錯。
不要為所有人竭盡全力:一個想法在第一次提出時可能看起來不錯,但人們不明白開發人員需要在之後維護這個功能。如果它很痛苦並且不經常使用,那麼該功能就不會得到維護,並將成為技術債。請記住,網路上的隨機陌生人總是有想法。由您或您的團隊決定投入腦力給哪些項目。
創造你喜歡和享受的東西:開發人員經常失去對專案的興趣,因為維護可能很麻煩並且需要很長時間。如果開發人員不再積極使用該項目,則尤其如此。弄清楚你的動機是什麼,如果它改變了,那也沒關係。
我可能會在另一篇文章中詳細闡述這些內容,因為這可能是它自己的主題,但我覺得在 Tabby 上工作讓我對我希望我的項目如何工作有了更多的了解。此外,我對開源社群的了解也得到了擴展。
我感謝所有每天為改進 TabbyAPI 和 ExllamaV2 做出貢獻並提出建議的人。每個人都幫助完善和改進程序,以便更好地用於一般用途。我是一個人,幫助別人會減輕我的負擔。
在可預見的未來,我將減少在 Tabby 上的工作量。這個計畫仍在順利進行,許多人都致力於改進它,但我的心理健康更重要,休息會有所幫助。
感謝您閱讀這篇回顧展。如果您想了解更多關於我和我所做的事情,請訪問 kingbri.dev。
Brian Dashore 的個人網站
重要
除了自述文件之外,請閱讀 Wiki 頁面以獲取有關入門的資訊!
注意
需要幫忙嗎?加入 Discord 伺服器並獲得 Tabby 角色。請在提問時保持友善。
基於 FastAPI 的應用程序,允許使用 Exllamav2 後端使用 LLM(大語言模型)生成文字
該項目被標記為滾動發布。後續可能會出現錯誤和變更。請注意,如果需要,您可能需要重新安裝依賴項。
TabbyAPI 是一個僅供少量使用者使用的業餘愛好項目。它不適合在生產伺服器上運行。為此,請查看支援這些工作負載的其他後端。
重要
本自述文件不適用於入門。請閱讀維基百科。
閱讀 Wiki 以了解更多資訊。它包含面向使用者的安裝、設定、取樣、API 使用等文件。
以上是為什麼我要製作 TabbyAPI的詳細內容。更多資訊請關注PHP中文網其他相關文章!