人工智慧和機器學習的發展,催生了對高效、安全且能與不同系統相容的模型儲存和分發方法的迫切需求。隨著模型日益複雜、應用場景愈趨多元,序列化格式的選擇成為一項關鍵決策。這個選擇會影響到人工智慧系統的效能、資源使用和安全性。
本報告將探討幾種主流的模型序列化格式,包括 Safetensors、CKPT、ONNX 和 GGUF,並著重介紹它們的獨特功能、常見用途,以及彼此之間的比較。
1. AI/ML 中的模型序列化簡介
模型序列化是將一個訓練完成的機器學習模型儲存成檔案的過程。這個檔案可以被儲存、分享,或在日後重新載入使用,例如進行預測、繼續訓練或執行分析。這項功能對於整個人工智慧與機器學習的生命週期至關重要,從研究開發到大規模部署皆然。
模型格式在 AI/ML 生命週期中的關鍵角色
將模型儲存為標準格式之所以重要,原因有幾個:
- 可再現性: 它讓研究實驗得以精確重現與驗證。
- 協作: 標準格式讓團隊能輕易分享模型,使他們能夠共同合作,並將模型整合到更大的系統中。
- 部署: 序列化將訓練好的模型變成一個可攜式檔案,可以在從雲端伺服器到邊緣裝置等各種環境中載入和執行。
- 遷移學習: 它使得運用預訓練模型作為新任務的基礎成為可能,這能大幅節省訓練時間和資料。
現代格式所應對的挑戰概述
隨著機器學習的進步,現代序列化格式也演化來解決幾個關鍵挑戰:
- 安全性: 一個主要擔憂是傳統方法中的安全風險,特別是那些使用 Python pickle 模組的方法。這些方法可能在模型載入時允許惡意程式碼執行,若模型來源不可信,將構成嚴重的安全威脅。
- 效能: 現今龐大而複雜的模型要求極快的載入速度和高效率的記憶體管理。這對於資源有限的裝置(如手機)和需要即時回應的應用程式尤其重要。
- 可攜性與互通性: 機器學習領域使用許多不同的框架(如 PyTorch、TensorFlow 和 JAX)。我們需要一種格式,能讓模型在這些框架之間輕鬆轉移,並在不同的硬體(GPU、TPU)上運行,而無需進行大規模的修改。
近年來,人工智慧社群已轉向使用更高效、更安全的格式,如 GGUF 和 Safetensors,這反映了社群為解決這些問題所做的集體努力。
早期儲存機器學習模型的方法,例如 PyTorch 使用 Python 的 pickle 模組來處理其 .pt 和 .pth 檔案,因其易用性而被選用。它們可以輕易儲存複雜的 Python 物件,包括模型的架構及其訓練狀態(如優化器)。雖然這在 Python 環境中進行研究時很方便,卻也產生了一個重大的安全漏洞。pickle 模組的設計方式使其在載入過程中,能夠執行嵌入在檔案中的任何程式碼。這意味著從不可信的來源載入一個看似無害的模型,可能會危害整個系統。
Safetensors 這類格式的誕生,以及 ONNX 和 GGUF 日益普及,正是對這種安全風險以及對更高性能和可攜性需求的直接回應。例如,Safetensors 的建構初衷就是為了防止惡意程式碼執行。這顯示隨著機器學習領域的成熟,以及 AI 從研究走向實際應用,安全與效率不再是事後考量,而是設計新格式的核心原則。這種轉變代表著一種必要的移轉:從以研究為中心的彈性,轉向生產級別的安全與穩固性,從而修復了舊有、較寬鬆方法所留下的「技術債」。
框架原生格式,例如 PyTorch 的 .pt/.pth 和 TensorFlow/Keras 的 .ckpt/.h5,與其特定框架緊密整合。雖然這讓它們在單一生態系統中效率很高,卻也引發了嚴重的互通性問題。在一個框架中訓練的模型,若無複雜的轉換或為每個框架維護獨立的系統,就無法輕易在另一個框架中使用。這導致了開發與部署工作流程的脫節。
開放神經網路交換(ONNX)格式的創建就是為了打破這些壁壘。它為模型提供了一個「跨平台」和「供應商中立」的標準。它透過一種抽象的方式來定義模型的結構(其運算圖),使其獨立於任何單一框架。同樣地,GGUF 雖然最初是為 llama.cpp 專案而生,但也著重於改善大型語言模型(LLM)在不同平台間的相容性。
現今格式的多樣性反映了機器學習產業的一個核心張力:開發過程中對框架特定功能的需求(例如 PyTorch 的動態圖所帶來的研究彈性),與對通用、高效且安全的部署需求之間的矛盾。這種張力意味著多種格式將繼續並存,使得轉換工具和先進的 MLOps 管線在連結模型開發與部署方面變得日益重要。不同的格式將根據其獨特優勢,繼續在機器學習生命週期的特定階段被使用。
2. 了解 Safetensors
Safetensors 是模型序列化領域的一大進步,其設計宗旨在於解決傳統模型儲存方法的安全與效率問題。
定義與核心設計原則
Safetensors 是由 Hugging Face 創建的一種現代、安全且快速的深度學習模型序列化格式。其主要目標是為儲存和分享張量(tensors)——構成機器學習基本數據單元的多維陣列——提供一個安全的方式。該格式的設計旨在比 pickle 等舊格式更安全、更快速。
Safetensors 的一個核心原則是將模型權重(張量)與任何可執行程式碼嚴格分離。此設計直接解決了在舊有序列化方法中發現的安全漏洞。
主要特性
- 零複製與延遲載入: Safetensors 效能的關鍵之一是其「零複製」能力。這使得模型資料可以直接從磁碟映射到記憶體中,而無需創建額外的副本,從而節省記憶體並加快載入速度。它還支援「延遲載入」,意味著只有在需要時,大型模型的必要部分才會被載入到 RAM 中。這對於極大型模型或記憶體有限的系統非常有用。
- 結構化的元資料處理: 每個 Safetensors 檔案都包含一個獨立的 JSON 格式元資料區段。此區段列出了模型中的所有張量,並附有其形狀、資料類型和名稱等詳細資訊。元資料指向實際張量資料在檔案中的儲存位置,這同時提升了可讀性與安全性。
- 僅儲存張量資料: Safetensors 最重要的安全特性是,它被設計為「僅包含原始張量資料和相關的元資料」。從其架構上,「不允許序列化任意的 Python 程式碼」。這個根本性的設計選擇消除了在載入模型時執行惡意程式碼的風險。
- 支援量化: Safetensors 可以處理量化後的張量,這有助於使模型更小、使用更少記憶體。然而,其量化支援「不如 GGUF 靈活」,因為它依賴於 PyTorch 框架所提供的功能。
主要優點
- 增強的安全性(緩解任意程式碼執行風險): 這是 Safetensors 最大的優勢。其設計從根本上防止 Python 程式碼被儲存在檔案中。這消除了基於 pickle 的格式中最嚴重的安全風險:在模型載入時執行惡意程式碼。這使得 Safetensors 成為分享和使用來自公開或不可信來源模型的最佳選擇。該格式還包括其他安全功能,如「先進的加密技術」和存取控制,以防止資料被篡改。
- 效能最佳化: 零複製和延遲載入的運用帶來了「更快的載入時間和更低的記憶體使用量」。基準測試顯示,它比 pickle「快得多」,並且「在 CPU 上比傳統 PyTorch 儲存方法快 76.6 倍,在 GPU 上快 2 倍」。
- 可攜性: 該格式設計為可攜式,意味著它能跨不同程式語言運作。這使得在各種軟體系統中分享和使用模型變得更加容易。
- 無縫整合: Safetensors「與現有的機器學習框架和函式庫無縫整合」。這讓開發者可以輕鬆採用這種更安全的格式,而無需對其現有工作流程進行重大更改。
與傳統序列化(例如 Pickle)的比較
Python 的 pickle 模組,被用於 PyTorch 的 .pt 和 .pth 檔案,本質上是不安全的。它允許任何程式碼被隱藏在序列化檔案中,並在檔案載入時自動執行。這是一個眾所周知且嚴重的漏洞,尤其是在使用從公開網站下載的模型時。雖然像 picklescan 這樣的工具可以偵測某些惡意模式,但它們並非萬無一失,無法保證安全。
Safetensors 的創建正是為了解決這個安全問題。透過只允許檔案中包含原始張量資料和結構化元資料,它消除了執行惡意程式碼的可能性。除了安全性,Safetensors 還提供了更好的效能。其為記憶體映射和延遲載入的設計,與通常一次將整個模型載入記憶體的 pickle 相比,帶來了顯著更快的載入速度和更高效的記憶體使用。
Python pickle 的安全漏洞意味著,從不可信來源下載一個 .pt 或 .pth 檔案,不僅僅是下載資料,更像是執行一個潛在有害的程式。眾所周知,「在不執行的情況下,沒有 100% 萬無一失的方法可以驗證 pickle 檔案的安全性」。這將檢查檔案安全的責任推給了使用者,而這項工作既困難又不可靠。
Safetensors 改變了這種局面,它透過重新設計格式本身來防止有害程式碼從一開始就被包含進來。它將安全責任從使用者困難的驗證過程轉移到格式內建的安全性上。這標誌著開源 AI 社群從「先驗證,後信任」的方式,轉向「依設計而信任」的模式。這種轉變承認,要掃描複雜檔案中所有可能的威脅幾乎是不可能的。透過阻斷攻擊途徑(任意程式碼執行),Safetensors 使得廣泛分享模型變得更安全,從而鼓勵協作,並讓更多人能更容易地使用預訓練模型。這種「依設計而信任」的原則對於整個 AI 生態系統的成長和安全至關重要。
雖然 Safetensors 的創建主要是出於安全考量(為了解決 pickle 的漏洞),但它也帶來了重大的效能提升,例如更快的載入速度、更低的記憶體使用量和零複製操作。這些效能增益不僅僅是副作用,它們是 Safetensors 最佳化設計的直接結果,該設計利用記憶體映射和延遲載入來有效地處理資料。這使其在處理大型模型時自然更有效率。
這種增強的安全性與顯著的效能改進相結合,是其被廣泛採用的關鍵驅動力。如果 Safetensors 只提供更好的安全性,它的採用速度可能會較慢,特別是對於那些不立即關注安全性的使用者。然而,清晰可測的效能優勢為每個人提供了轉換的強烈理由,加速了它在像 Hugging Face 這樣的主要平台上的整合。這表明,在 AI 工程中,一項技術通常需要同時提供安全和效能的優勢,才能被業界迅速而廣泛地接受。
3. 關鍵模型格式概述
除了 Safetensors,機器學習領域還有其他幾種重要的格式,每種都有其自身的特性和使用案例。
3.1. CKPT(檢查點)
AI 檢查點並非單一檔案類型,而是在訓練過程中某個特定時間點儲存的模型狀態快照。在長時間的訓練任務中,檢查點對於保存進度至關重要。
特性與典型使用案例
一個檢查點通常包含模型的學習參數,如其權重和偏置。它還可以儲存恢復訓練所需的其他重要資訊,例如優化器的狀態、當前的週期數和學習率排程。檢查點的副檔名因框架而異。對於 PyTorch,它們通常是 .pt 或 .pth,而對於 TensorFlow/Keras,則是 .ckpt 或 .h5。
CKPT 檔案的主要優點包括:
- 可再現性: 它們確保模型在重新載入時行為一致,這對於驗證研究和維持可靠效能至關重要。
- 協作: 它們易於分享,讓開發者能夠複製結果或在現有工作基礎上繼續發展。
- 彈性: PyTorch 的
.pt/.pth格式特別靈活,使得為研究目的儲存和載入模型變得簡單。
CKPT 檔案的常見使用案例包括:
- 恢復訓練: 繼續一個被中斷的訓練過程,這能節省大量的時間和計算資源。
- 微調: 使用預訓練模型作為在新、更特定的資料集上進行訓練的起點。
- 模型評估: 在訓練的不同階段測試模型效能,而無需重新訓練。
- 推論: 將完全訓練好的模型載入到生產系統中進行預測。
- 研究與實驗: 分析模型隨時間的演變,並系統性地調整其參數。
- 遷移學習: 作為相關任務的強大起點,減少訓練時間和資料需求。
- 災難復原: 在長時間訓練過程中發生故障後,作為恢復工作的備份。
安全考量
CKPT 檔案最大的安全風險,特別是 PyTorch 的 .pt 和 .pth 格式,來自其對 Python pickle 模組的依賴。這意味著這些檔案可以被設計成包含惡意 Python 程式碼,並在載入時執行(如果使用 torch.load 函數時未使用 weights_only=True 設定)。此漏洞(CWE-502:不信任資料的反序列化)可能導致嚴重後果,例如資料竊取、模型行為被篡改,甚至整個系統被接管。
業界已經意識到這個風險,而 Safetensors 已成為一個更安全的選擇。正如所指出的,「大多數 Stable Diffusion AI 檢查點都以 .ckpt 或 .safetensors 等格式儲存… .safetensors 是一個更安全的替代方案,旨在防止惡意程式碼執行。」這顯示了在模型分享方面,朝向更安全格式發展的明確趨勢。
CKPT,特別是 PyTorch 的 .pt/.pth 格式,以其「高度靈活」而聞名。這種靈活性讓它們不僅能儲存模型權重,還能儲存優化器狀態,甚至是自訂的 Python 類別,這對於精確地恢復訓練非常有用。
然而,正是這種靈活性造成了安全漏洞。因為該格式可以儲存任何 Python 物件,攻擊者可以在模型檔案中隱藏惡意程式碼。當檔案在沒有適當預防措施的情況下載入時,該程式碼就會執行。這揭示了系統設計中的一個基本權衡:更高的靈活性通常會導致更大的攻擊面和更高的安全風險。
業界的解決方案是採用像 Safetensors 這樣的格式來分發模型,即使在受控環境中進行訓練時,仍然使用更靈活的 .pt/.pth 格式。這顯示了人們越來越理解,機器學習生命週期的不同階段需要不同程度的安全性。儲存完整訓練狀態的強大功能最好保留在受信任的開發環境中,而分享和部署則需要具有內建安全保證的格式。
3.2. ONNX(開放神經網路交換)
ONNX,全名為開放神經網路交換(Open Neural Network Exchange),是一種用於機器學習模型的開放標準格式。它旨在讓模型能在不同的深度學習框架之間運作。
特性與主要使用案例
一個 ONNX 檔案包含模型的完整結構,包括其操作序列(運算圖)、學習到的權重和其他元資料。ONNX 的一個主要優勢是它扮演著通用翻譯器的角色。在 PyTorch、TensorFlow 或 scikit-learn 等框架中訓練的模型可以轉換為 ONNX 格式,實現「一次訓練,隨處部署」的方法。
與只儲存模型權重的格式(如 Safetensors 或 GGUF)不同,ONNX 包含了模型的運算圖。這種基於圖形的結構在「在不同框架之間轉換模型時提供了更大的靈活性」。ONNX 在眾多平台、裝置和硬體加速器(CPU、GPU、AI 晶片)上提供了出色的可攜性。模型以 Protobuf 格式儲存,這是一種高效、平台中立的結構化資料儲存方式。
ONNX 的主要使用案例包括:
- 跨框架部署: 在與訓練時不同的框架或環境中執行模型。
- 高效能推論: ONNX Runtime 是一個推論引擎,能自動為特定硬體優化模型,通常能帶來更快的效能。
- 邊緣與行動裝置部署: 其小巧的體積和最佳化的執行環境使 ONNX 成為在資源有限的裝置上執行模型的良好選擇。
- 生產系統: 其穩固性和可攜性使其在要求嚴苛的生產環境中部署模型時廣受歡迎。
安全考量
ONNX 模型一個隱晦但嚴重的安全風險是潛在的架構後門。攻擊者可以修改模型的運算圖,加入一個只有在特定輸入下才會觸發的隱藏路徑。一旦被啟動,這個後門可能導致模型產生惡意或意想不到的輸出,而在標準輸入下其行為完全正常,使其難以被偵測。其他風險包括模型反轉攻擊(提取敏感的訓練資料)和對抗性攻擊(使用惡意輸入來欺騙模型)。
為降低這些威脅,建議採取以下幾種做法:
- 對 ONNX 模型進行數位簽章,以確保它們未被篡改。
- 在隔離的環境中部署模型,例如 Docker 容器,並配置強大的網路安全。
- 使用監控工具來追蹤模型行為並偵測異常。
- 遵循一般安全最佳實踐,例如淨化輸入和保持軟體更新。
ONNX 通常比基於 pickle 的格式更安全,因為它在載入時不會執行任意程式碼。然而,如果一個 ONNX 模型使用了外部實現的自訂層,若管理不當,這些層可能包含惡意的 Python 程式碼。
缺點
儘管 ONNX 支援量化模型,但它「並不像 GGUF 那樣無縫地原生支援量化張量」。它將量化張量分解為獨立的整數和縮放因子張量,這「可能導致品質下降」。轉換具有複雜或自訂層(非 ONNX 標準)的模型也可能很困難,並且可能需要可能拖慢效能的自訂工作。
基於 Python pickle 的傳統格式(如 .pt 檔案)儲存的是 Python 物件,其中可能包含可執行的程式碼。這將模型視為一個程式。相比之下,ONNX 專注於儲存模型的「運算圖」——一個更抽象的操作與資料流表示,而非特定的程式碼實現。
正是這種以圖為中心的方法賦予了 ONNX 出色的跨框架可攜性,並使其能夠為不同硬體進行優化。透過在更高層次上定義模型的邏輯,它變得獨立於其訓練時所使用的框架。這是一個重大的概念轉變,從框架特定的實現轉向可攜式的計算表示。雖然這極大地提高了部署的靈活性,但它也帶來了新的安全問題,如架構後門,這需要與用於基於 pickle 格式不同的安全策略。
3.3. GGUF(GPT 生成統一格式)
GGUF(GPT-Generated Unified Format)是一種專為高效儲存和執行大型語言模型(LLM)而設計的檔案格式。它是其前身 GGML 的改良版,旨在讓 LLM 更易於使用,尤其是在個人電腦上。
特性與主要使用案例
GGUF 的設計旨在使 LLM 體積更小、載入速度更快。這對於在本地端執行模型至關重要,因為本地的儲存空間和 RAM 通常有限。該格式使用「先進的壓縮技術」來實現這一點。它還提供了一種標準方式來封裝模型的權重、架構和元資料,確保它在不同軟體間,特別是基於 llama.cpp 的推論引擎上,能一致地運作。
GGUF 的一個關鍵特性是其對量化的出色支援。量化降低了模型權重的數值精度(例如,從 16 位元降至 4 位元數字),這極大地減少了檔案大小和執行所需的計算量。GGUF 模型提供多種量化等級(從 Q2 到 Q8),在大小和品質之間提供了一系列權衡。
- 較低的量化等級(如 Q2 或 Q3)產生的檔案非常小,可以在 RAM 較少的硬體上運行,但模型品質可能略有下降。
- 較高的量化等級(如 Q6 或 Q8)保持了更好的品質,但需要更多的儲存空間和 RAM。
GGUF 的主要使用案例包括:
- 本地 LLM 部署: 像 Ollama 這樣的工具使用 GGUF,讓使用者能輕易地在自己的電腦上執行強大的 LLM。
- 離線 AI 助理: 許多應用程式使用 GGUF 模型,以提供雲端 AI 工具的本地、私密替代方案。
- 程式碼輔助: IDE 和程式碼編輯器正開始使用 GGUF 模型來實現智慧程式碼補全。
- 本地聊天機器人: GGUF 模型常用於私密且反應迅速的對話式 AI 系統。
- AI 研究: 其靈活性和量化支援使其在研究人員中廣受歡迎,用於在可及的硬體上進行 LLM 實驗。
安全考量
與普遍看法相反,底層的 GGML 函式庫(GGUF 所基於的)曾有記載的漏洞,與「對輸入檔案的驗證不足」有關。這些缺陷可能導致「在解析過程中產生潛在可利用的記憶體損毀漏洞」。已發現特定的安全問題,其中未經檢查的使用者輸入可能導致堆積溢位,潛在地讓攻擊者得以執行惡意程式碼。
一個常見的誤解是,GGUF 檔案「不能包含程式碼」,並且「僅僅是一個模型檔案」。然而,一份來自 Databricks 的安全報告顯示,雖然 GGUF 檔案本身不包含可執行的 Python 程式碼,但一個特殊製作的檔案可以利用解析器(讀取該檔案的軟體)中的缺陷,來造成記憶體損毀並實現程式碼執行。
為降低這些風險,最好:
- 使用來自知名、信譽良好來源(如 Koboldcpp)的模型和工具。
- 在隔離的環境中(如 Docker 容器)執行 LLM。
- 對於高度敏感的任務,考慮使用一台沒有網路連線的專用機器。
缺點
GGUF 的一個主要缺點是,大多數模型最初是在其他框架(如 PyTorch)中開發的,必須轉換為 GGUF 格式。這個轉換過程不總是很順利,而且某些模型可能不被 GGUF 相容的工具完全支援。此外,模型一旦轉為 GGUF 格式後,要進行修改或微調通常「並不直接」。
雖然 GGUF 設計用於快速載入和高效的 VRAM 使用,但實際的推論速度(模型生成回應的速度)有時可能比未量化的模型慢。這在較低的量化等級下可能發生,因為在推論過程中需要額外的工作來反量化權重。GGUF 的主要效能優勢在於它使得大型模型能透過節省 VRAM 在消費級硬體上運行,而不必然是讓它們變得更快。
GGUF 的決定性特徵是其與量化的深度整合,這使得強大的 LLM 能夠在 VRAM 有限的「消費級硬體」上運行。這有助於 AI 的普及化。然而,這種效率涉及權衡。雖然量化使模型變小,但較低的等級可能會略微降低模型品質。此外,推論速度有時可能比未量化的模型慢,特別是如果未量化的版本能完全放入 VRAM 的話。
GGUF 的「速度」優勢通常指的是更快的載入速度,以及在有限硬體上能夠運行更大模型的能力,而非原始效能。GGUF 完美地抓住了「AI 普及化」的趨勢,讓更多人能接觸到先進的模型。這要求使用者在模型品質與其硬體限制之間取得平衡。多種量化等級的可用性讓使用者能根據自身特定需求調整模型,這是該格式在本地 AI 社群中廣受歡迎的關鍵。
4. 格式比較分析
選擇合適的模型序列化格式是一項策略性決策,取決於在安全性、效能、資源效率、互通性以及特定應用情境等多個因素之間的權衡。下表就這些關鍵維度對 Safetensors、CKPT、ONNX 和 GGUF 進行了比較概述。
| 特性/格式 | Safetensors | CKPT (.pt/.pth) | ONNX | GGUF |
|---|---|---|---|---|
| 主要目的 | 安全、快速地儲存深度學習模型張量 | 訓練檢查點、模型參數、狀態保存 | 跨框架互通性、在多樣化硬體上部署 | 高效儲存 LLM、在消費級硬體上進行優化的本地推論 |
| 安全狀況 | 高(依設計無法執行任意程式碼) | 低(可透過 Pickle 反序列化執行任意程式碼) | 中等(無任意程式碼執行,但可能存在架構後門) | 中等(底層函式庫有漏洞,但檔案本身非可執行的 Python 程式碼) |
| 載入速度 | 非常快(零複製、延遲載入) | 不一(因完全載入可能比 Safetensors 慢) | 快(優化過的執行環境、圖形優化) | 快(mmap、針對 LLM 進行了優化) |
| 記憶體使用 | 高效(延遲載入、部分載入) | 可能很高(載入整個物件圖) | 高效(執行環境優化) | 非常高效(量化、節省 VRAM) |
| 磁碟空間 | 高效(壓縮、僅張量) | 不一(可能很大,包含完整狀態) | 高效(Protobuf 格式) | 非常高效(量化、先進壓縮) |
| 量化支援 | 有,但不如 GGUF 靈活(依賴 PyTorch) | 有(依賴框架) | 原生支援有限(分解張量) | 強大(多種等級,Q2-Q8,特化變體) |
| 可攜性 | 高(跨不同程式語言) | 低(與特定框架緊密耦合) | 非常高(跨框架、跨平台、多樣化硬體) | 高(尤其在 llama.cpp 生態系中) |
| 主要應用 | 安全的模型分享、Hugging Face 預設格式 | 訓練、微調、研究、模型儲存 | 生產部署、行動/邊緣裝置、互通性 | 本地 LLM 推論、消費級硬體、聊天應用 |
| 關鍵優勢 | 依設計而生的安全性、快速載入、低記憶體佔用 | 保存訓練狀態、詳細的可再現性 | 通用部署、執行環境優化、框架無關性 | LLM 在消費級硬體上的高效率、靈活的量化 |
| 關鍵劣勢 | 在 C++ 中需 JSON 解析器處理元資料 | 任意程式碼執行風險、檔案體積大 | 對自訂層處理複雜、原生量化支援有限 | 通常需要轉換、較低量化等級可能降低推論速度 |
5. 結論
機器學習模型格式的世界正不斷演進,其驅動力來自於對更高安全性、效能和互通性的追求。傳統格式,如基於 pickle 的 CKPT 檔案,雖然在研究上具有彈性,卻因允許任意程式碼執行而帶來了嚴重的安全風險。這促使了更新、更安全的格式的開發與採用。
Safetensors 是此轉變的領先範例。透過將資料與程式碼分離,並採用高效的載入技術,它為分享深度學習模型提供了一個安全且高效能的替代方案,尤其是在 Hugging Face 生態系中。其兼具安全性與速度的雙重優勢,使其成為現代 AI 工作流程中的熱門選擇。
ONNX 解決了框架不相容這個主要問題。透過將模型表示為抽象的運算圖,它讓模型得以跨不同硬體和軟體進行部署。雖然 ONNX 避免了 pickle 中所見的任意程式碼執行問題,但它有其自身的安全考量,如架構後門,需要不同的保護措施。
GGUF 則是一個專為在消費級硬體上執行大型語言模型而設計的解決方案。其強大的量化功能顯著減少了模型大小和記憶體使用量,讓更多人能夠接觸到強大的 LLM。然而,這種效率有時可能導致推論速度較慢,且其底層函式庫曾被發現存在漏洞,需要使用者保持警惕。
總歸來說,最佳格式取決於具體情境。
- Safetensors 是安全且高效地分享深度學習模型的首選。
- ONNX 是在不同框架和硬體間部署模型的理想選擇。
- GGUF 為在本地、資源有限的裝置上執行大型語言模型提供了無與倫比的效率。
雖然傳統的 CKPT 格式在受控環境中保存訓練進度仍有其用處,但在公開分發方面,它們正被更安全的替代方案所取代。隨著 AI 領域的成熟,這些特化格式的持續發展,對於推進機器學習的力量與觸及範圍將至關重要。





