The Transformers Library:模型定義的標準化

釋出於 2025 年 5 月 15 日
在 GitHub 上更新

一句話總結:未來,我們的目標是讓 Transformers 成為跨框架的支點:如果一個模型架構得到 transformers 的支援,那麼你可以期待它在生態系統的其他部分也得到支援。


Transformers 創建於 2019 年,緊隨 BERT Transformer 模型的釋出。自那時起,我們一直致力於新增最先進的架構,最初專注於 NLP,然後擴充套件到音訊和計算機視覺。如今,transformers 已成為 Python 生態系統中 LLM 和 VLM 的預設庫。

Transformers 現在支援 300 多個模型架構,平均每週新增約 3 個架構。我們致力於及時釋出這些架構;對最受追捧的架構(Llamas、Qwens、GLMs 等)提供零日支援。

一個模型定義庫

Transformers standardizing model definitions

隨著時間的推移,Transformers 已成為 ML 生態系統的核心元件,成為模型多樣性方面最完整的工具包之一;它已整合到所有流行的訓練框架中,如 Axolotl、Unsloth、DeepSpeed、FSDP、PyTorch-Lightning、TRL、Nanotron 等。

最近,我們一直與最流行的推理引擎(vLLM、SGLang、TGI 等)緊密合作,使它們將 transformers 作為後端。增加的價值是巨大的:一旦模型新增到 transformers 中,它就立即在這些推理引擎中可用,**同時利用每個引擎提供的優勢**:推理最佳化、專用核心、動態批處理等。

例如,下面是您如何在 vLLM 中使用 transformers 後端:

from vllm import LLM

llm = LLM(model="new-transformers-model", model_impl="transformers")

只需要這些,新模型就可以在 vLLM 中享受超快且生產級的服務!

更多詳情請閱讀 vLLM 文件


我們還與 llama.cppMLX 緊密合作,以使 transformers 和這些建模庫之間的實現具有出色的互操作性。例如,多虧了社群的巨大努力,現在可以非常輕鬆地在 transformers 中載入 GGUF 檔案進行進一步的微調。反之,transformers 模型可以輕鬆地 轉換為 GGUF 檔案,以供 llama.cpp 使用。

MLX 也是如此,transformers 的 safetensors 檔案與 MLX 的模型直接相容。

我們非常自豪 transformers 格式正在被社群採用,帶來了我們都從中受益的互操作性。使用 Unsloth 訓練模型,使用 SGLang 部署它,並將其匯出到 llama.cpp 在本地執行!我們致力於繼續支援社群向前發展。

致力於更簡單的模型貢獻

為了讓社群更容易地使用 transformers 作為模型定義的參考,我們努力大幅降低模型貢獻的門檻。我們已經為此努力了幾年,但在接下來的幾周內,我們將顯著加速這一程序。

  • 每個模型的建模程式碼將進一步簡化;為最重要的元件(KV 快取、不同的注意力函式、核心最佳化)提供清晰簡潔的 API。
  • 我們將廢棄冗餘元件,轉而採用簡單、單一的方式使用我們的 API:透過廢棄慢速分詞器來鼓勵高效分詞,並類似地使用快速向量化視覺處理器。
  • 我們將繼續加強對**模組化**模型定義的工作,目標是讓新模型只需絕對最小的程式碼更改。六千行的貢獻、新模型二十個檔案的更改已成為過去。

這會如何影響你?

作為模型使用者,這意味著什麼

作為模型使用者,未來您會發現您使用的工具之間有更多的互操作性。

這並不意味著我們打算讓您在實驗中只能使用 transformers;相反,這意味著由於這種建模標準化,您可以期望您用於訓練、推理和生產的工具能夠高效地協同工作。

作為模型建立者,這意味著什麼

作為模型建立者,這意味著一次貢獻就能讓您的模型在所有集成了該建模實現的相關庫中可用。多年來,我們多次看到這種情況:釋出模型壓力很大,整合到所有重要庫中通常會耗費大量時間。

透過以社群驅動的方式標準化模型實現,我們希望降低跨庫的貢獻門檻。


我們堅信這個新的方向將有助於標準化一個經常面臨碎片化風險的生態系統。我們很樂意聽取您對團隊決定採取的方向的反饋,以及我們為實現目標可以做出哪些改變。請訪問 Hugging Face Hub 上的 transformers-community 支援選項卡

社群

太棒了!Transformers 成為儘可能多模型在釋出首日的預設訪問點,*並且*能夠使用選擇的推理引擎,這是一個史詩般的目標!

如果一個模型架構受到 transformers 的支援,那麼你可以期待它在生態系統的其他部分也得到支援。

這很有趣,但似乎無論 TLDR 如何,Llama.CPP 都維護自己的實現,因此不會從 Transformers 中新架構的任何“零日支援”中受益。我一度希望 Llama 能直接與 Transformer 相容。

目前尚不清楚那裡有什麼變化,如果有的話。

·
文章作者

很好的問題 @usbphone

您完全正確,llama.cpp 維護自己的實現;不過,我們一直與團隊緊密合作,以實現更好的互操作性:在兩邊框架之間進行匯出(從 transformers 到 llama.cpp,反之亦然)。

此外,隨著最近 VLM 的頻繁釋出,我們一直直接與 @ngxson 合作,以便當實現已存在於 transformers 中時,在 llama.cpp 中實現零日(或零周)支援。

我們不會有“自動零日支援”,因為這兩個庫有不同的後端;但我們仍然可以透過提高兩者相容性來嘗試,從而縮短實現所需的時間。

謝謝 @lysandre 。如果我聽起來過於消極,深表歉意,這是一個非常好的目標。

既然我懷疑 Llama.cpp 不會像 VLM 那樣直接實現 Transformers(儘管那會很好),也許可以使用 Llama 提供的低階 C 繫結來建立一箇中間專案。我相信 llama-cpp-python 和類似專案就是這樣工作的。

話又說回來,我也不確定有多少好處,但值得思考。

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.