深度對談vLLM團隊:如何從零搭建一個成功的開源生態|此話當真EP27

用聲音,聽見真格。
「此話當真」是一檔泛商業類播客,我們希望搭建這樣一個分享和交流的平臺,讓每一個對商業、科技、創投充滿好奇的人都能在這裡有所收穫。每期播客將會由不同的真格投資人擔任主持,和各領域的領軍人物一起帶大家深入瞭解科技趨勢,以及創新技術的影響力。交流科技熱點,我們只想給你最專業的解讀。
當然,我們希望這不僅僅是一個播客,更是一次創業的探索。真格,你的創業第一站!我們期待與你相遇,一同發現新的可能。

內容綱要

在本期播客中,他們將會談到:
• vLLM 如何在短短兩年內成為了炙手可熱的開源大模型推理加速框架?
• 從學界專案出發,vLLM 團隊是如何精準發揮自身優勢的?
• 為何 vLLM 開源專案能夠建立起如此活躍的技術社群生態,吸引全球人才共創?
• vLLM 的團隊如何看待商業化,他們對作為開源專案的 vLLM 有什麼願景?
以下是真格團隊整理的對話內容,也歡迎大家移步小宇宙 APP、喜馬拉雅或 Apple Podcast 搜尋並訂閱「此話當真」收聽完整版。
01
vLLM 專案與團隊的基本介紹
Wendi:
首先請大家介紹一下自己在 vLLM 團隊中負責的工作,以及大家是怎麼知道、如何決定加入 vLLM 的?
Zhuohan:
大家好,我是李卓翰,目前是加州大學伯克利分校的博士生,我的研究領域是機器學習系統,在這個領域我們會透過系統最佳化提高機器學習演算法和模型執行速度,以及研究如何做更大規模、更加高效的並行、執行等等一系列的問題。我從第一天開始就在 vLLM 團隊裡,從零開始與夥伴一起做出了 PagedAttention 演算法、投研究論文,再到之後開源專案的整理、釋出,一直髮展至今天。目前我主要負責 vLLM 的高層框架設計與開源社群的管理和宣傳。
Lily:
大家好,我是 Lily 柳曉萱,現在也是伯克利的博士生。我在 vLLM 釋出論文的時候知道了這個專案,覺得非常有意思。正好當時我也做了一些關於推理最佳化的科研工作,覺得可以在 vLLM 裡嘗試自己在科研方面的想法,所以就決定加入。我在 vLLM 裡做的工作主要是科研導向,在 vLLM 這個框架內部尋找有沒有可以繼續探索、挖掘的科研方向,比如說推理加速、任務排程最佳化的研究。當然,做科研的目的還是希望有更多的人可以使用。
Simon:
大家好,我叫 Simon,我是伯克利第二年的博士生。我大概是在暑假結束的時候加入了 vLLM 團隊,協助搭建整個開源的生態,這也是我現在的大概工作。我從 7 年前在伯克利讀本科的時候就在做關於開源的專案,特別是在機器學習等領域的專案上做過技術和產品向的工作。現在我算是 vLLM 的產品經理或者社群管理者,在做架構相關的一些工作。
Kaichao:
大家好,我是遊凱超,我是清華的博士生,今年在伯克利訪問。我在之前做過一些機器學習的算法理論,包括機器學習編譯器相關的內容。而 vLLM 針對大模型推理最佳化裡面有一部分就是用機器學習編譯器,所以我自然地加入到 vLLM 作為我訪問的重點專案。
但是加入之後,在開始機器學習編譯器相關的進展之前,我發現 vLLM 作為一個開源專案還有很多需要最佳化的部分,我認為得先把 vLLM 做好,後面裡面的每一部分才會有它的價值,所以我現在先在做 vLLM 開源內容的維護管理。 
Wendi:
請大家和聽眾朋友們介紹一下 vLLM 專案吧。
Simon:
vLLM 是大語言模型的推理與服務引擎。簡單來說, vLLM 的功能是將已經訓練好的模型部署到生產環境裡面,並著重於效率與成本。具體表現上,它讓模型在溝通時能回覆得更快,也能讓 GPU 物盡其用,最終可以讓 AI 產品落地更快。
Zhuohan:
從技術角度來講,vLLM 首先基於的是我們提出的 PagedAttention 演算法。PagedAttention 是一種新的注意力計算方法,利用作業系統裡面的分頁和虛擬記憶體技術來管理最佳化 Transformer 模型注意力操作裡的 KV 快取(KV Cache)。使用 PagedAttention 技術後,記憶體利用率相較於之前最好的系統能夠有大概 4-5 倍的提高,吞吐量也會有大概 4 倍的提升。或者說,用同樣的一塊 GPU,你可以服務比之前多 4 倍的請求。

同時,vLLM 也是一個比較完整的大語言模型的推理和部署的引擎。像連續批處理(Continuous Batching)、CUDA Graphs、模型量化(Quantization)、模型並行、字首快取(Prefix Caching),推測解碼(Speculative Decoding)等等一系列的技術都被包括在專案裡面,並且也有一系列為推理定製的 CUDA 核函式(CUDA Kernels),這些技術一起提高了大語言模型的推理速度和吞吐量,使得與直接使用 Hugging Face 上的模型 Transformer Library 做推理相比能夠有大概一到兩個數量級的吞吐量提升。

除此之外,vLLM 作為一個開源專案,也和以 Hugging Face 為例的一些社群緊密結合,從而目前能夠支援一鍵部署 30 多種不同的大語言模型,例如 Llama、Mixtral、千問、零一萬物等。我們也在不停地進行前沿探索。例如在硬體適配方面,除了 Nvidia GPU 之外,怎樣能夠把 vLLM 在其他的硬體上面跑起來?再比如在科研方面,我們也在做能夠進一步提高系統效率和推理速度的研究。
Yusen:
關於模型推理的加速其實有不少的技術方案思路,vLLM 是在什麼技術方向上去提升效能的?
Simon:
可以分很多方向來講,但總結下來都需要透過在不同的系統資源中進行取捨選擇,去提高整個模型的推理能力。比如說最開始說的模型量化(Quantization)是透過失去一部分準確性(accuracy)來提高速度;推測解碼(Speculative Decoding)是用更多的計算資源提高速度;分塊預填充(Chunked Prefill) 是透過減少生成第一個 token 的時間來提高整體響應流延遲的穩定性。然後字首快取(Prefix Caching)是利用多餘的記憶體和 GPU 資源來提高生成第一個 token 的速度。所以其實有不同的最佳化方向,大家都在其中選擇對使用場景最合適的一個方式。
Zhuohan:
補充一點,我覺得還有一種分類這些方法的方式,大概兩類。第一類是在單個模型和單個請求上面做了一些最佳化,把推理的一些操作用更好的針對於推理的方式來實現,讓它變得更快。例如 Simon 剛剛提到的模型量化(Quantization),或者是一個更好的 GPU 核函式(GPU Kernel)。這一類的最佳化其實是在 vLLM 之前已經有很多的推理引擎都在做的事情,比如像 Nvidia 的 TensorRT、FasterTransformer。
但其實對於大模型推理來說,還有一類更加重要,就是在有多個不同的請求同時來到系統的時候要做的最佳化。這個最佳化包括了像連續批處理(Continuous Batching)——讓這個新請求和執行到一半的請求一起執行的技術。以及我們提出的 PagedAttention,是為了解決在進行連續批處理時遇到的記憶體問題而進行的一種特定最佳化。再包括 Simon 剛剛提到的分塊預填充(Chunked Prefill)和字首快取(Prefix Caching)。而這一類最佳化在 vLLM 之前基本上沒有大模型推理的框架會想到要去做。
02
從零到一,成為最快、最好用的開源引擎
Yusen:

在 ChatGPT 出來之前,你們是如何想到這個想法,推出 vLLM 第一個版本的?這是一個非常新穎的思路。

Zhuohan:

在 2022 年年底,我們在學校搭建了一個大語言模型的 Demo。那個時候伺服器上使用的模型還是 Facebook 的 OPT-175B 模型。那時,Facebook 還沒有改名為 Meta。我們最初建立這個 Demo 是為了宣傳我們之前的另一個開源專案 Alpa。但是在部署 Demo 的時候,我們發現它執行得非常緩慢,並且 GPU 的利用率特別低。

這讓我們認識到,大型語言模型的推理效率本身是一個需要關注的問題,特別是超越這個模型本身的一些最佳化。

雖然 Alpa 專案在模型並行等方面已經做了一些最佳化,但這還不夠,我們還需要進行更多跨請求的最佳化工作。

我們注意到當時市場上完全沒有開源系統專注於大語言模型的推理最佳化,所以我們打算自己動手,從零開始做一個。開發到一半時,我們意識到大模型推理過程中 GPU 記憶體本身是一個巨大的瓶頸,而且以往的記憶體管理方式存在極大的浪費。經過多次迭代,我們提出了一種新的注意力計算方法,因為注意力機制是在大語言模型中極為重要的操作。為了改善這一操作的記憶體瓶頸問題,我們提出了 PagedAttention 演算法,發現這個技術能夠比之前節省很多記憶體,提升儲存效率。
2023 年 2 月左右,我們將 PagedAttention 作為一個研究想法開始做,著手撰寫論文、構建研究原型,透過實驗來證明我們的想法是可行的。到 2023 年 6 月底,正式釋出了 vLLM 這個開源專案。我們非常幸運,有很多人瞭解和使用了這個專案,我們也一直維護到了今天。

Yusen:

vLLM 的論文作者和專案組成員其實經歷了一個演變的過程。vLLM 作為一個開源專案,和很多創業公司也不太一樣。能否介紹一下咱們現在團隊成員的組成,大家是以怎樣的組織形式進行合作的?

Simon:

有個很簡單的答案,就是我們的團隊主要由伯克利的博士生組成。我們都在同一個實驗室,有相同的導師團隊。我們的組織形式並沒有那麼嚴格或正式,大家都是出於對這個專案的興趣和喜愛,以及願意能在這裡做開源相關的工作而聚在一起。這也代表著我們沒有任何業績考核,導師們對我們也沒有硬性要求,完全是靠內在動力驅動的合作專案。

Yusen:

就是為愛發電。
Zhuohan:
是的。我想補充一點,作為伯克利博士生,我覺得我們實驗室有一個比較好的傳統,是說我們喜歡做這種非常務實的問題,尤其是目前工業界碰到的痛點。我們希望做出來的產品能夠在工業界被部署和直接應用,併產生直接的影響。而開源專案是能讓自己直接實現這種影響非常好的方式。如果你有一個研究想法,併成功地將其轉化為一個高質量的開源專案,大家就能夠更容易地使用這個專案,採納你的研究想法,進而提升了這個研究的影響力。對於我們這些系統方向的博士生來說也很有吸引力。
Yusen:

一開始 vLLM 的目標是什麼?你們怎麼看現在離這個目標的距離和實現程度?

Zhuohan:
專案的目標從一開始就是成為最快、最好用的開源引擎,並且能夠成為大語言模型推理的一個標準。

我們一直在努力成為最快,因為大家也在不斷追趕,我們也不斷有新技術推出,不斷最佳化我們的框架。
我們認為好用是一個開源專案必須具備的特點,這樣大家才會開始使用它,才會提出問題或做出進一步的貢獻。所以這是第一道門檻,我們必須把門檻設得非常低。至於成為一個標準,我們還在努力。我們希望能夠做到這一點,但這是一個逐漸的過程。

Lily:

我想補充一下。當我剛加入 vLLM 時,主要是圍繞 PagedAttention 這項技術。但在過去這一年,我覺得 vLLM 真的變化很大,從一個最佳化方向變成了一個非常完善的框架。我覺得從科研角度來說,vLLM 現在作為一個推理框架,它就像一個百寶箱。如果你想實現各種想法或嘗試各種功能,你都可以在 vLLM 找到一個入口,並且可以很快地實現它。

Yusen:

Lily 要不正好講一講,你覺得從 PagedAttention 開始,vLLM 最近兩年最大的更新升級是什麼?

Lily:

對我來說,可能最開始 vLLM 是以連續批處理(Continuous Batching)和 PagedAttention 技術為核心,到後來在技術層面發展了推測解碼(Speculative Decoding)。我肯定有自己的偏見,因為我做的科研是關於推測解碼(Speculative Decoding)的,即減少推理的延遲,讓它變得更快。所以對我來說這是一個非常重要的功能。因為實際上我們以前做的相關科研並不是很真實,雖然演算法很厲害,大家稍微驗證了一下,但沒有人在一個生產場景下真正證明這項技術是可行的。但在 vLLM 中,我們實現了這樣的框架,並且我們也可以驗證它確實可以加速。它可以顯著幫助減少延遲,在某些場景下可以減少兩到三倍,所以我覺得這對我而言是一個很大的更新。
還有就像卓翰提到的字首快取(Prefix Caching)和模型量化(Quantization),我覺得對延遲和硬體都有很大影響。
03
「大衛戰勝歌利亞」,開源模式和程式碼質量是核心
Yusen:

在 AI 興起的時候,很多人都覺得大廠因為有更多的算力、資金和人,面對學界具備很多優勢。但作為一個為愛發電的團隊,vLLM 卻在如何提高推理效率這一重要的領域獲得了世界級的成果表現,有點像大衛戰勝哥利亞,或者說至少暫時跑贏哥利亞的故事。這裡面有沒有一些特別的原因?

Simon:

從戰略上來講,首先是基於我們實驗室的開源傳統。伯克利系統方面的實驗室之前就做過很多開源專案,比如最古早的 BSD(Berkeley Software Distribution)、資料庫領域的 Postgres、硬體領域的 RISC-V、資料處理領域的 Spark、AI 領域的 Ray。這些開源專案都是一脈相承的,是嘗試從學界做出來一個實用的專案,讓業界一起參與,同時學界也可以瞭解新的想法,開發新的框架。
圖片來源:PostgreSQL 官網

當我們把 vLLM 做大的時候,我們想要做的是不能只讓伯克利的博士生用愛發電寫程式碼,因為我們知道博士生不可能全職寫程式碼,這就代表著我們要讓這個專案有足夠多業界的人參與進來。但如何讓他們參與進來呢?他們需要透過這個專案貢獻對公司業務有幫助的功能。不同的公司貢獻不同的功能,當這些公司把他們的功能都加起來的時候,他們可能在三個月內就完成了需要閉門造車三年才能達到的一些成就。

Zhuohan:

除了開源的戰略模式以外,在技術上我也想講兩點。第一點就是很多人認為,大模型需要很多 GPU。其實在做大語言模型推理的時候,這一點不是特別成立。比如說你想要做一個 Llama 7B 或者 Llama 13B 模型的推理,其實你只需要一塊 A100 GPU 就能夠做這件事情。即使是一個比較大的模型,像 Llama 70B,你可能有 4-8 塊 GPU,你就可以做這件事情。

所以大語言模型推理系統是一個學術界也能夠做得比較好的領域。

第二點原因是,

開源框架會對我們的程式碼質量提出非常高的要求。

作為開源專案,我們需要吸引更多的貢獻者,大家會希望我們程式碼簡潔、易讀且進行很好的模組化。在另一方面,做大模型推理的系統是一個較複雜的工程。一個好的程式碼的組織結構對功能的新增和整合、系統的速度來說很重要。因此,由於我們從始至終對程式碼質量的堅持,vLLM 能夠不停地整合新的最佳化方法和功能,使得它能一直跑在前列。

Yusen:

既然我們的組織相對鬆散,成員大多是學生,如何讓程式碼質量達到這麼高的水平?

Zhuohan:

程式碼質量這個事情比較主觀、很難量化。我覺得可能源於我們始終會堅持對專案的高標準,比如說一個隨機的貢獻者給了一個程式碼更改(Pull Request,PR),我們一開始就會非常認真地做程式碼審查(Code Review),並且甚至很多時候我們會接替處理這個 PR,自己給它貢獻一些程式碼,把它改好之後再合併,保證這個程式碼的質量比較高。並且我們會經常做各種各樣的重構(Refactoring)。
我覺得一個比較重要的事情是模型量化(Quantization)。如果你是一個在公司裡的軟體工程師,你的領導給了一個做框架的任務,驅動你的可能是要儘快地、不管用什麼方式先把這個功能給實現出來。不管程式碼寫成什麼樣,趕緊上線,才能完成 KPI。但我們團隊想的問題就是我們要能夠搭建一個好的量化框架,使得讓其他發明了新的量化演算法的人可以比較簡單地在 vLLM 裡面實現他的演算法,並且這個演算法能夠在其他的所有的模型上都可以被簡單地使用。

我們當時做了一系列的重構(refactoring)來改變我們模型的實現方式,使得量化演算法實現的方法和大語言模型 LLM 本身的定義完全分離。這樣你新加一個新的量化方法就會變得比較簡單、乾淨,同時加模型的人也不需要考慮我的這個模型到底要怎麼量化。這只是其中一個例子,我們在其他方面也做了很多這樣子的抽象(abstraction)工作,比如我們做了硬體的抽象,凱超最近也在做不同分散式的編制(orchestration)方式的重構(refactoring)。我覺得這個是我們保證程式碼質量的一個比較重要的原因。
Simon:

再加一點,很多在伯克利讀系統的博士生,大家其實都在業界工作過,也知道好的、高質量的程式碼是長什麼樣子。所以說到最後其實更多偏向於變成個人和團隊的選擇,而不是一個能力的問題。

Yusen:

你們剛剛講到了 vLLM 作為一個為愛發電的開源組織,因為沒有明確的 KPI 或者產品釋出的壓力,反而能做到一些在大廠裡面不太容易實現的目標。我正好也想追問 Simon,因為你之前也是作為創始成員加入了 Anyscale,一家從伯克利實驗室開源專案慢慢成長起來的獨角獸公司,能不能請你再展開講一講伯克利的開源傳統,以及開源怎麼樣能夠帶動業界和學界一起探索?

Simon :

伯克利的開源傳統很多,簡單來講就是讓學界最新的一些想法去跟業界的生產環境和具體的使用場景去碰撞,同時也讓學界比較愛探索的博士生去與業界比較謹慎的工程師去碰撞,產生新的東西。比如說,博士生可能就愛寫做得更快、更有意思、更好的抽象的東西,而業界就會偏好更實用的東西。在這個上面大家其實會雙方都在互相地學習,就會讓最後做出來的開源專案做到又實用,又能帶領其他競品不斷提升,就會誕生新的想法。當時做 Ray 的時候,我們出了一個叫 Actor 的抽象(abstraction),在這個上面之後幾乎所有的框架都加入了相關的抽象(abstraction)。
04
vLLM 的使用者軼事與發展藍圖
Yusen:

在這兩年的時間裡面, vLLM 的發展有哪些關鍵的節點?團隊的思路上有些什麼樣的轉變?早期使用者跟我們合作有哪些需求反饋?後面在整個發展過程中有沒有遇到什麼樣的困難?

Zhuohan:

最開始我們的唯一追求就「快」。特別是在 Facebook 的 OPT Demo 時,速度實在太慢了,當三個人同時使用時,系統就卡頓嚴重,需要排隊等待十分鐘。因此,我們最初的需求就是提高速度。
這裡有一個小故事可以分享。當我們的 PagedAttention 論文發表後,到開源之前有兩個月的時間。這期間,我們不僅在整理程式碼,還在實驗室的另一個專案 Chatbot Arena 中應用了 vLLM。當時他們需要評估很多不同的大模型使用了比較簡單的 Hugging Face 的框架。但隨著使用量的增加,發現無法支援所需的流量。因此,他們在我們開源之前就採用了 vLLM 框架。在與他們合作的過程中,我們修復了很多 bug,使得我們在開源釋出之前就已經有了一個成熟的使用者基礎。
從最初的 OPT Demo 到 Chatbot Arena,我們的目標還停留在速度。但在開源釋出之後,我們的目標變得更加多樣化。首先,我們要支援多種模型。因為當時各種新模型層出不窮,我們需要改造系統讓新增新模型變得容易。對於重要的模型,我們會盡快甚至在模型釋出的當天就把它加入進來。另外,在更廣度的層面,我們需要整合各種最佳化方法,構建一個更好的系統架構,從而使得其他的貢獻者能夠比較容易地加入新的最佳化措施。而在開源之後,vLLM 新的重要變化在於從單一的「快」轉變為更多地為開源社群和其貢獻者服務的角色。
圖片來源:Chatbot Arena 官網
Yusen:
vLLM 支援的模型非常的多,並且很多主流的開源模型在釋出之前都會來主動找我們進行適配,這種緊密的合作關係是怎麼建立起來的?
Zhuohan:

合作的建立是一個自然的過程,最大的原因其實還是我們的框架比較好用,使用者使用後確實能夠感受到速度的提升。隨著開源使用者的使用量增長,如果大家都在使用 vLLM 來支援模型的話,那大家會想接著用 vLLM 去部署他們新發布的模型,因此把他們新發布的模型整合進 vLLM 也成了一個對他們來說高優先順序的事項,這也是一個比較有機的過程。我們也因此和很多開源模型開發的團隊建立了比較多的聯絡。

Yusen:

這裡面有沒有什麼比較有意思的故事可以分享的?

Zhuohan:

我覺得和 Mistral 合作比較神奇。他們在第一個模型釋出的時候就找到我們了,當時他們還是一個不太出名的歐洲公司,我們唯一看到的就是他們融了很多資金,然後我們看著他們一路發展,直到今天。

Simon:

對,他們會有一些比較有意思的神奇的操作。比如說在一個週五大家都比較放鬆準備過週末的時候,他們會突然在 X 上面釋出一個 P2P 種子連結,裡面只有模型的權重和一些最基本的配置引數,就是你不能直接執行的東西。他們讓大家去猜測、去逆向工程、去玩。但這個時候 Mistral 團隊已經透過郵件給我們發了一個 PR,說這個東西你現在不能告訴大家,這樣等我們正式向全世界釋出之後,你就可以直接擁有第一時間的支援了。
所以說週末的時候看著大家都在猜測這個模型,而我們已經知道這個模型的程式碼,但哪都不能說。這個在第一次的時候還挺好玩的,可以看一下大模型廠商做的有意思的公關宣傳。

Yusen:
現在大模型釋出前的懸念其實越來越拉滿。不管是像 OpenAI 這樣的閉源模型,還是像 Llama、千問、 Deepseek 這樣的開源模型,大家都像會拿到新的玩具一樣好奇他們接下來要做什麼,以及他們會有什麼樣新的特點?說到這個,其實 Deepseek 和千問最近都發了 V2,在開源界反響都很好。你們在和他們合作時有沒有什麼有意思的故事,或者說觀察到他們為什麼能夠成長得這麼快?
Simon:
這個說實話好像我們沒有特別多的資訊,反而確實是有一些很正面的合作體驗。
Zhuohan:
我覺得很有趣的一點就是當一個模型比較火了之後,關於這個模型的 issue 就會瘋狂地增加。比如很多人會說只要 vLLM 跑不了千問了,那就說明這段時間千問比較火。如果這一段時間跑不了 Deepseek,那就說明這一段時間 Deepseek 比較火。而且他們跑不下來的原因可能就是因為自己的環境有些問題。
Simon:
對,這也是我們知道模型火爆程度的另一個方式。比如說去年有段時間 ChatGLM 在 vLLM 的支援不是很好,但是我們一天到晚都能收到使用者的提問,然後一直在那些 issue 上面評論說想來跑這個模型,然後我們就會拿到這個訊號,儘快地去做適配。
Zhuohan:
如果我沒記錯的話,當時可能有大概 5 個不同的 PR 來支援 ChatGLM。
Yusen:

這也是開源的好處,就是一個海納百川的過程,大家都可以互相進步,並且分享更多的資訊。今天很高興請到了 vLLM 比較新的兩位成員 Lily 和凱超,想請凱超分享一下,自從加入 vLLM 以來,有沒有遇到什麼印象深刻的事情?特別是在技術上遇到了哪些難點?

Kaichao:

我覺得做 vLLM 最特殊的一點在於我們在做的是一個真正很多人在用的系統。

如果你是做純粹的科研,比如說發一篇論文可以有很多的前提條件。你可以說我只在這幾個條件下測試,在這幾個條件下我有效,那麼我就可以寫論文。可如果我們要做一個大家都能用的系統,最大的困難就是它能出錯的地方都可以出錯,比如說硬體會有問題,驅動會有問題,然後軟體環境也會有問題,所以你就需要有全面的場景支援。

就像我們之前除錯了很久的一個問題,最後發現是 Nvidia 的驅動、軟體有問題。如果是在做學術研究的時候,有問題跳過它、換一個版本就可以了。但是做一個系統需要考慮說使用者裝的就是這個版本,我們沒有辦法改變它,我們該怎麼辦。我覺得在克服這些困難的過程中,個人也學習到很多,因為這就是真實世界中的困難。
Yusen:
你提到的這一點非常重要。因為很多的時候研究只針對特定情況,但作為開源專案,我們現在實際上已經支援了 30 多種不同型別的大型語言模型,要支援這麼多的模型並不容易。你認為未來我們會重點支援幾個模型,還是繼續保持這種開放的方式?
Kaichao:
目前其實他們的架構還沒有那麼多樣,當然我們現在也有一些模型支援得不夠好,比如像 Embedding 的模型,還有 Encoder-Decoder 的模型。如果未來模型變得更加多樣化,就像我們最近在討論的狀態空間模型(State Space Model,SSM),它們可能沒有那麼複雜的視訊記憶體管理需求;還有一些混合形式的模型,既有注意力機制,又有區域性性的特徵,這個時候可能會更加困難一點。當我們評估模型支援的複雜程度時,我們不能只看它有多少種,或者有多少個名字,而更應該看這個名字背後的模型有哪些創新結構,這些結構是最難支援的。
Yusen:
你們認為接下來什麼樣的結構會成為主流?大家現在都在尋找模型結構上的創新,你們對未來的發展有沒有什麼看法?
Kaichao:
我認為大家正在追求效率。我的感覺是模型能力的上限似乎已經接近了。那些頂級的模型,可能基本上已經滿足大家的需求了。那麼這個時候,大家就開始降低成本,即如何在保持模型質量大概相同的同時,讓它推理得更快?比如之前 DeepSeek 的 Latent Attention 機制,我認為接下來探索模型效率極限的工作會更多。
Simon:
從我的角度來看,很多是場景驅動的。目前大模型在語言生成或聊天機器人方面的架構可能沒有太多變化,但當大家逐漸把它應用於長文字處理時,可能就需要比較不同的、更稀疏的,或者採用其他本地注意力機制的東西。或者是多模態,當加入圖片生成和理解、影片和語音相關功能時,模型架構可能還需要進一步變化以更好地適配他們。我個人認為,這其中基礎的注意力機制可能不會有太大變化,而是大家會根據不同的使用場景,不同模型的不同版本去改造它。
Zhuohan:
之前我們看到的一個比較大的浪潮是 MoE,即混合專家模型(Mixture of Experts,MOE)。這是我們過去經歷過的一個比較重要的大模型架構變化。
Yusen:
是的, MoE 其實現在逐漸成為開源模型都在做的一個技術方向。
05
vLLM 決定做的與決定不做的
Yusen:

在 vLLM 的發展過程中,在資源有限的情況下把它做得這麼好,肯定有很多取捨的。有什麼是我們選擇不去做的事情?

Simon & Zhuohan:

我主要想講三個不同的點。第一,我們選擇了不去做公司,

不去做商業化專案,但希望大家都能在這上面進行商業化,去做一個可以加速所有 AI 公司的一個開源專案。雖然這可能意味著我們損失了一些盈利空間,但我們認為這有助於加速整個 AI 、AGI 領域的歷史程序,這是非常有意義的。

第二,在技術上我們選擇了不把追求極致的效能放在絕對的最高優先順序。許多競品專案,如 TensorRT-LLM 或 TGI,可能會選擇使用 C++ 或 Rust 程式語言重寫大部分系統以提升效能。但我們發現,這樣做雖然能達到極致的效能,但也會讓人更難參與到這個開源專案中。我們認為即使使用 PyTorch 和一些簡單的 C++ 程式碼,也能讓大家更好地使用和修改 vLLM,為它貢獻程式碼。

我們會考慮一些能夠讓程式碼比較簡潔,讓大家更容易參與的方式,一步一步慢慢走,最終走到極致效能的目標。

第三,我們選擇不執著於 Nvidia 的顯示卡。儘管現在大家都在使用它們,但我們會願意投入很多時間和團隊資源去了解其他硬體,我們認為這是未來的趨勢和方向。會用這些本來可以在 Nvidia GPU 上面最佳化的時間,去嘗試發展 AI 在那些其他硬體上面的功能和效能。

Kaichao:

補充一點,易用性對我們來說非常重要,甚至比效能更重要。如果有一種方法可以提速 10%,但程式碼卻很難被理解,我們就不會接受它。在我們定期舉辦的線下活動上,很多 NLP 研究人員告訴我們,他們之前只會使用 Hugging Face 的 Transformer,但後來發現用 vLLM 只需更改幾行程式碼,推理時間就從幾個小時縮短到幾分鐘,對於他們來說易用性就是第一位的。

Lily:
易開發性也是很重要的一點。有些功能可以提升效能,但如果它們讓程式碼很難開發,我們最終可能不會加入。我們希望社群還是有更多的人來貢獻到程式碼中,所以有一些比較複雜的功能我們最後還是沒有把它加進去,為了保持易開發性,也為了吸引更多的貢獻者。
Yusen:
在開源領域把這個盤子做大是一個非常核心的事情,在這上面我們要做很多取捨。
06
vLLM 如何維持豐富的開源生態
Yusen:
現在 vLLM 主要的貢獻者都有哪些?他們也一起為愛發電,動力來自於什麼地方?剛才說到的活動中、合作中有哪些有趣的故事呢?
Simon:
在 vLLM 生態系統裡面,貢獻者分一次性的和長期性的,還有一些真正將 vLLM 用在生產環境中的使用者。包括雲廠商、模型廠商、硬體廠商以及一些將 AI 放在首位的公司。他們都有自己的團隊在 vLLM 上進行開發和貢獻。
例如,Oracle、IBM這樣的雲廠商會有固定的團隊在 vLLM 上編寫程式碼。模型廠商如 Mistral 和千問,他們在模型釋出時,會花很多時間在 vLLM 上進行簡單的修改和適配,以支援他們的新模型,或者在內部使用的時候就用 vLLM 進行修改和開發。
硬體廠商像 AMD、Intel、 Google,他們各自有各自的硬體,但都有獨立的團隊進行 vLLM 的適配和調優工作。在產品上面把 AI 放在第一位的一些公司,比如說 LinkedIn 和 Roblox,他們也會長期地使用 vLLM,這樣能讓他們對專案未來發展有更好的話語權,同時也保證有內部專家用 vLLM 從生產環境上幫助他們。
此外,還有新一代的 AI 基礎設施公司,如 Anyscale 或 NeuralMagic,有自己的 AI 基礎設施產品。
雖然各有各的重心,但他們都會用 vLLM 作為底層專案,基於 vLLM 進行二次開發和包裝,提供整套產品的售賣和服務。當然,還有許多我們只知道 GitHub 使用者名稱的貢獻者,其中不少是學生,也可能是對大型語言模型感興趣的工程師。我們非常感謝他們的參與。
Wendi:
現在的 vLLM 的外部貢獻者已經達到了一個非常高的比例。從去年開源到現在,vLLM 只花了一年時間。相比起其它歷史上比較成功的開源專案來說,vLLM 在這麼短的時間內是怎樣加速吸引這麼多外部貢獻者的?有沒有什麼心得可以分享?
Simon:
其實可能很大一部分是運氣。但同樣重要的是我們努力在維護開源社群和生態系統。vLLM 很幸運,在釋出後因為充分的準備和專案本身的高質量而受到大家的喜愛,它使用起來非常方便,幾乎可以立即投入使用,不出現大的問題,使用者就會願意持續使用並進行分享推薦。另一個運氣是,vLLM 在市場上是很個新的東西,並且由於它的高質量的特點,很快就成為了大家第一選擇的專案。當我們在市場上獲得了領先地位時,我們就會更加關注誰在使用它,以及怎麼去擴大貢獻者的規模。
擴大貢獻者的規模沒有特別的秘訣,就是一個一個來。先確保一家公司能在 vLLM 上穩定貢獻,然後是第二家、第三家。在這個過程中,開源生態中的每一個提 issue、PR 或與我們交流的人都非常有意思,都值得我們去了解他們的背景,與他們建立深入的關係。去了解他們為什麼對這個專案感興趣,他們的工作是什麼,以及為什麼在工作中會使用 vLLM。瞭解了他們是誰之後,就能很好地建立穩定的貢獻關係。 
Wendi:
我們知道 vLLM 舉辦過一些線下見面會活動,對於一個充滿活力的社群來說,有什麼有趣的使用者或者故事可以分享嗎?
Simon:
我們有很多線下活動,它們更像是大家可以面對面答疑和交流的機會。其實到目前為止,我們只舉辦了四次線下活動,每次持續一到兩個小時。其中一些有趣的點是,我們會遇到一些只是透過網名相互稱呼的人,有點像網友見面的感覺。
社群裡還有一些像無名英雄一樣的人物,比如有一位在英國的工程師,他白天空閒時會幫我們分析一些舊的 issue,檢查 bug 報告是否已經被解決或者不再需要,然後他會對這些 issue 進行分類、關閉它們,或者詢問我們是否還需要繼續處理。因為他在英國,我們早上起來經常會發現他又關閉了二三十個 issue,一個月後他可能關閉了四分之一的 issue,這對我們的開源社群有非常大的幫助。因為這些東西真的需要一個人來做,目前來說很難訓練一個 AI 去判斷如何處理這些 issue。社群裡面有很多這樣一直在默默貢獻的人。
Kaichao:
我們每次舉辦活動,都能聽到一些新的公司用了 vLLM。比如說上次我們就聽到 Adobe 的人說他們 Adobe 的產品背後就是用 vLLM 在支援。
Yusen:
真格基金也捐贈了另一個開源專案 ControlNet,有意思的是,ControlNet 比較像是張呂敏獨自天才的瘋狂輸出,而 vLLM 是一個貢獻者非常多樣的開源專案。Simon 也參與過很多開源專案,現在有很多 AI 領域的團隊想從開源專案的角度入手去做一些事情。那麼假設現在有一個全新的開源專案團隊,我們能分享給他們什麼經驗?
圖片來源:ControlNet 在 GitHub 的主頁

Simon:
我認為非常重要的一點是,一個人做開源是為了什麼?特別是商業團隊做開源時,更要想清楚開源的目的,比如說是為了營銷、銷售、招聘,還是為了尋找
產品市場契合點(Product Market Fit, PMF)。如果只是學生做開源的話,就要想清楚你有多少時間花在這上面,你願意投入多少精力。其中很重要的一個節點就是去接受使用者,接受提出需求或者給你提 bug 報告的人,去了解他們,然後去問他們你為什麼需要這些東西?我能幫你做什麼?特別是作為有能力做出一個很有意思的開源專案的人,你怎麼去抑制一種「我行我上,我去把它改得更好」的衝動,而是給予耐心讓社群慢慢成長起來,讓瞭解你的開源專案的人越來越多,這樣才能真正把盤子做大。

Yusen:
一開始,vLLM 是一個非常精幹但又互補的團隊。最初如何搭建起貢獻者團隊的過程中,有沒有什麼經驗可以分享?
Zhuohan:

最開始做研究的時候,主要是我和另一個 vLLM 的共同創造者 Woosuk Kwon。他是一個非常好的核心開發者(kernel writer),會寫很好的底層程式碼。我們兩個人在技術上是互補的,我可能做一些更高層次的排程和管理。我們兩個看起來都比較「程式設計師」,而 Simon 因為在 Anyscale 有產品管理經驗,他後來加入我們的專案,幫助 vLLM 成長了很多,讓我們的專案管理井井有條,讓更多貢獻者能夠加入。包括後來的 Lily,她從研究者的角度為我們提出了很多意見,加入了新的功能。凱超是最新加入的貢獻者,他給我們帶來了很多新的視角,並且修復了很多 bug,所以也幫助我們的專案非常多。

Wendi:

如果將時間線往回拉,有沒有一個瞬間讓你們確定到 vLLM 它找到了 PMF,是怎樣找到的?

Simon:

我用一句話來回答就是

當 issue 和 PR 都開始爆炸性地指數級增長,然而我們已經沒有精力去加更多的功能來適應大家的需求的時候,你就大概知道 PMF 在哪兒了。

當然最好不要是 bug 的報告,而是大家真的想要這個產品更好用的那些功能需求。

07
有關未來發展,有關商業化
Wendi:

Lily 在 vLLM 團隊負責科研方面,推理加速引擎這個領域現在有哪些前沿的學術研究探索?vLLM 專案和這些學術研究如何結合與互補?

Lily:

我們現在做的比較多的關於推理的加速,主要針對降低延遲這個角度。在降低延遲裡有幾個大方向,第一個是推測解碼(Speculative Decoding),就是說我們透過用一個小模型近似生成一些結果給大模型驗證,來降低一些跑大模型的開銷。第二個是低精度的推理,比如我們最近一直在推 FP8。第三個是關於 KV Cache 的最佳化,比如如果有多節點的 KV Cache 該怎麼儲存。這些是目前在進行的科研探索。
怎麼把科研和 vLLM 專案實際結合呢?首先我們會把最基礎的功能先做到 vLLM 裡面,比如說我們會先支援一個比較通用的推測解碼(Speculative Decoding)的框架,這樣的話不同的研究者他們可以在上面構建自己想要的演算法。現在的生態裡,有非常多推測解碼(Speculative Decoding) 的貢獻者,有做研究的,也有公司就想試試這個演算法的。我們會積極地審查 PR,保證這些 PR 和我們這個框架是相容的。

在 vLLM 做科研是真的可以落地的,並且作為一個研究者你的專案能被別人看到並且得到驗證,這種好處會給研究者很多的激勵。比如說之前 IBM 有一個推測解碼(Speculative Decoding)演算法做進來以後,在我們還沒有好好測試完的時候,就已經有人給我們報 bug。感受到有人非常積極地跟隨著你的專案對我們來說是一個很強的正反饋。還有一個好處是,當你真的把這個東西實現了,變成一個可以投入業界使用的東西的時候,你會發現很多新的問題,然後為了解決這些新的問題,你可以做更多的科研,所以這是一個這個正向迭代的過程。
Wendi:
vLLM 下一步的工作重點是?
Lily:
第一,vLLM 會在提供更多硬體支援的方向上努力。這也是 vLLM 和其他框架很不一樣的地方, vLLM 創立的初衷就是希望它能夠比較好地支援不同的硬體,不僅僅是支援,我們還希望包括硬體廠商和我們自己在內的各方能投入時間來最佳化效能。因為不同的卡的成本差異還是比較大的,我們希望開源社群的使用者能夠使用我們的框架來挑選對他們來說經濟適用且效能可接受的、成本最低的硬體。為實現這一目標,vLLM 將繼續支援不同的硬體,並且將與硬體廠商緊密合作。這是第一個比較大的主題。
第二,我們會繼續做 vLLM 的效能最佳化,無論是在科研方面還是在專案工程方面。在科研方面我們就有很多的研究者開發新的演算法。在專案工程方面得益於我們高質量的開源社群,有很多資深和專業的工程師來幫我們繼續進行效能最佳化。我們希望使用者相信 vLLM 的效能是有競爭力的,並且非常強大。
第三,我們一直努力讓 vLLM 的架構保持一種延展性 。就是說使用者很好改,貢獻者也很容易在裡面加一些新的東西。vLLM 發展得特別快,如果你看它每天提交的 PR 數量,實際上非常非常多。因此,我們一直致力於提供好的抽象(abstraction),這樣我們就可以支援更多的排程策略、不同的後端或不同的最佳化。我們將確保我們的框架核心是乾淨、通用且易於使用的。
Kaichao:
我覺得我們之後還要做更廣泛的模型支援。這一波 AI 浪潮的一個標誌是 ChatGPT,但發展到現在除了簡單的文字輸入輸出之外,我們還要處理更多的其他的複雜的模態,因此我們需要達到生產級別。之前作為研究論文,它可能只是一個想法,但要達到生產級別,就需要能夠擴充套件,比如一家公司使用我們的程式碼服務於成千上萬的使用者,它需要 24 小時不間斷執行,且不能出現問題。這時,你需要對它進行生產級別的處理,比如日誌、容錯、自動擴充套件等。
最後一點,我們會繼續更好地維護和構建開源專案,不只是程式碼公開的資源。我們遵循許多很好的開源專案的維護方式,例如 PyTorch 等。比如當我們有重大的框架變更的時候,我們都會有一個徵求修改意見稿(Request for Comments,RFC),經過了充分的討論之後才會提交程式碼,我們都是有這樣一步一步的指導方針,去摸索怎麼樣為 vLLM 的社群進行更好的貢獻。
Wendi:

過往的一些開源專案有很多商業化成功的案例。vLLM 團隊對商業化有怎樣的考慮?下一步的計劃是?

Zhuohan:

說實話我們肯定想過商業化。但我們碰到的一個問題是,如果我們只做大型語言模型的推理,這個商業模式不是很清晰。因為如果你只提供這樣的服務,一方面你的模型是開源的,大家都可以訪問。另一方面主流的硬體是 Nvidia GPU。最後,你唯一的護城河可能就是技術,但技術很難保持一直領先。大家最終都會弄明白如何將推理做到極致,這個時候你可能只能打價格戰,但價格更便宜意味著利潤更低,業務會難以持續。

另一方面,我們注意到,使用 vLLM 的公司的要做到比較好的商業模式不只做大語言模型推理。他們可能基於開源模型做微調,或者提供自己的模型訓練服務。或者有公司會自己開發硬體而不用 Nvidia GPU,比如說 Grok、SambaNova,那他們的利潤點可能是在自己的硬體方面。這些都是在大語言模型基礎設施這個領域的一些可行的商業化模式。

Simon:

最後我再加一點,在 vLLM 專案中,我們發現 vLLM 創造的價值遠遠超過我們小團隊能捕獲的價值。這也表示在 vLLM 生態中,許多公司發現他們的投入遠小於他們獲得的回報,他們的投資回報率是正的。從這個角度看,

我們很高興能做一個非商業化的專案,讓大家都能更好地商業化。

特別對於博士生來說,這已經是一個非常理想的結果了。

Wendi:

對 vLLM 來說,商業化不是下一步重點。

Zhuohan:

把開源專案做好、做成功,這是我們一開始的目標。

Simon:

做成為一個標準,成為一個大家都能使用的,都能去更好地加速他們所想做的東西,能加速整個 AI 的程序的一個東西,就是我們想做的。


Wendi:

在當前的競爭環境下,如果大家都能達到極致效果,不知道你們如何看待競爭,以及 vLLM 在其中的選擇?

Zhuohan:

雖然看起來都是做大語言模型基礎設施的公司,但實際上大家在做不同的事情。從最底層的硬體,到做雲服務的廠商,再到更定製化的大語言模型服務,不同的應用,它們肯定都是不同的賽道,所以我覺得還是一個比較豐富的市場,大家都能找到自己的定位。
08
團隊關注的開源專案與書籍分享
Wendi:
最後一個問題,想請問大家最近有沒有關注一些比較有趣、新鮮的開源專案?同時也很想知道大家最近都在看什麼書?
Simon:
最近關注的開源專案中,有一個叫 Unsloth 的專案,它和 vLLM 類似,專注於極致最佳化,但是他們重點在模型的微調,全部用 Triton Kernel 重寫。從技術角度來看,這個專案非常有意思,它推到了 PyTorch 目前無法達到的最佳化極致。當然,我們也期待 PyTorch 是不是很快就能趕上,這也是一個很有意思的社會實驗。
圖片來源:Unsloth 官網
關於書,我最近重讀了 Ben Horowitz 的《創業維艱》(The Hard Thing About Hard Things)。現在讀這本書特別有意義。一方面,我在思考 vLLM 作為一個類似創業專案,但又不完全是商業化的專案,與創業有什麼共同點和不同點。另一方面,透過回顧 2000 年的網際網路泡沫,思考我們現在可能也在一個泡沫裡,以及如何應對,這些都是非常有意思的內容。
Wendi:
vLLM 和創業的異同在於?
Simon:
在產品開發上,vLLM 和創業有很多相似之處,比如尋找 PMF 並維持它,在指數型的使用增長上也非常相似。不同之處在於,我們不會把精力投入到招聘、銷售或為了商業目的必須維持的其他活動上。這樣我們的目的會更純粹,我們也更享受這個過程。
Zhuohan:
我最近覺得有意思的專案是 Andrej Karpathy 最近開源的一系列專案。因為最近突然有很多人問我如何入門大語言模型,從哪裡開始。我想了半天,最後的結論是你可以看看 Andrej Karpathy 的專案。它們是對大語言模型非常好的系統性介紹,從零基礎到 vLLM 所需的一些核心技術,都可以在一個簡單的程式碼倉庫(repo)中看到。這對整個社群和世界都很有意義。關於書籍,我最近在讀 Elon Musk 的傳記。
Kaichao:
如果你對機器學習系統感興趣,尤其是使用過 PyTorch 並想知道它背後的工作,我推薦大家瞭解一下 PyTorch。PyTorch 是一個很好的開源專案的樣例。它一開始在和 Tensorflow 競爭時,和 vLLM 有些相似之處。當時 Tensorflow 的使用者可能會看不上 PyTorch,覺得太慢了。PyTorch 為了使用者的易用性做了這麼多的犧牲,這麼多的最佳化都沒有辦法做,但是後來 Tensorflow 因為太追求效能,基本沒有外部貢獻者,逐漸封閉,以至於現在很少有新使用者加入。我覺得學習 PyTorch 和它的設計可以給我們一些啟發。
圖片來源:PyTorch 官網
Zhuohan:
說到這一點,我覺得大家可以看看 Jax。Jax 是我看過那麼多專案中,唯一一個讓我看了之後覺得「哇,軟體還可以這麼寫,一切都很有道理」的專案。我覺得 Google 還是吸取了很多 Tensorflow 的經驗,把它們都用到了 Jax 裡面。
圖片來源:Jax 官網
Lily:
我最近在看一些關於智慧體(agent)的 repo,比如 Qwen-Agent,AutoGen,這些可能都比較舊。主要是因為 vLLM 自身還沒有到作業系統的核心部分(kernel)的級別,還處於推理引擎級別。我很好奇在大模型以上,大家是怎麼使用的,大家在玩哪些東西。如果聽眾們感興趣的話,也可以看看這些。
推薦閱讀

相關文章