AI Transformers 架構體系 權重文件類型 safeterson和gguf格式轉換【2-1】

  • 模型權重文件:存儲訓練好的模型參數,也就是w和b,是模型推理和微調的基礎
    • .pt.ckpt.safetensors、gguf
  • 配置文件:確保模型架構的一致性,使得權重文件能夠正確加載
    • config.jsongeneration_config.json
  • 詞匯表文件:保證輸入輸出的一致性
    • tokenizer.jsontokenizer_config.json

1、模型權重文件

  • 模型權重文件是存儲訓練好的模型參數,是模型推理和微調的基礎 ,常見的有.pt、.ckpt、.safetensors
  • 不同的框架(如TensorFlow、PyTorch)使用不同的模型文件格式

例如:

  • safetensors:適配多種框架,支持transformers庫的模型加載
  • PyTorch:選擇下載.pt或.bin格式的模型文件。
  • TensorFlow:選擇下載.ckpt或.h5格式的模型文件。

1.1 safetensors是什么?
  • .safetensors是由Hugging Face提出的一種新型的模型權重文件格式,有以下特點:
  1. 安全性:.safetensors采用了加密和校驗機制,防止模型文件被篡改或注入惡意代碼
  2. 性能:優化了數據加載和解析速度
  3. 跨框架支持:有多種深度學習框架的兼容性,便于在不同環境中使用
  • .safetensors中,大模型可被分為多個部分,格式類似modelname-0001.safetensors、modelname-0002.safetensors
  • model.safetensors.index.json是索引文件,記錄了模型的各個部分的位置和大小信息

2、配置文件

  • config.json、generation_config.json
2.1 config.json

  • config.json包含模型的配置信息(如模型架構、參數設置等),可能包含隱藏層的數量、每層的神經元數、注意力頭的數量等
  • config.json的基本結構如下:

(base) [root@inspur-nf5468m6-001 Qwen2.5-VL-32B-Instruct]# cat config.json 
{"architectures": ["Qwen2_5_VLForConditionalGeneration"],"attention_dropout": 0.0,"eos_token_id": 151645,"hidden_act": "silu","hidden_size": 5120,"image_token_id": 151655,"initializer_range": 0.02,"intermediate_size": 27648,"max_position_embeddings": 128000,"max_window_layers": 64,"model_type": "qwen2_5_vl","num_attention_heads": 40,"num_hidden_layers": 64,"num_key_value_heads": 8,"pad_token_id": 151643,"rms_norm_eps": 1e-06,"rope_scaling": {"mrope_section": [16,24,24],"rope_type": "default","type": "default"},"rope_theta": 1000000.0,"sliding_window": 32768,"tie_word_embeddings": false,"torch_dtype": "bfloat16","transformers_version": "4.49.0","use_cache": true,"use_sliding_window": false,"video_token_id": 151656,"vision_config": {"hidden_size": 1280,"in_chans": 3,"intermediate_size": 3456,"model_type": "qwen2_5_vl","out_hidden_size": 5120,"spatial_patch_size": 14,"tokens_per_second": 2,"torch_dtype": "bfloat16"},"vision_end_token_id": 151653,"vision_start_token_id": 151652,"vision_token_id": 151654,"vocab_size": 152064
}
  • 例如architectures字段指定了模型的架構,hidden_act字段指定了隱藏層的激活函數,hidden_size字段指定了隱藏層的神經元數
  • num_attention_heads字段指定了注意力頭的數量,max_position_embeddings字段指定了模型能處理的最大輸入長度等
2.2 generation_config.json
  • generation_config.json是用于生成文本的配置文件,包含了生成文本時的參數設置,如max_lengthtemperaturetop_k
  • generation_config.json的基本結構如下:
(base) [root@inspur-nf5468m6-001 Qwen2.5-VL-32B-Instruct]# cat generation_config.json 
{"bos_token_id": 151643,"pad_token_id": 151643,"do_sample": true,"eos_token_id": [151645,151643],"repetition_penalty": 1.05,"temperature": 0.000001,"transformers_version": "4.49.0"
}
  • 例如bos_token_id字段指定了開始標記的ID,eos_token_id字段指定了結束標記的ID,do_sample字段指定了是否使用采樣,temperature字段用于控制生成文本的隨機性,max_length字段指定了生成文本的最大長度,top_p字段指定了采樣的概率等
  • config.json 和 generation_config.json 都可能包含 "bos_token_id"(Beginning of Sequence Token ID)和 "eos_token_id"(End of Sequence Token ID)。在config.json中,這兩個字段用于模型的加載和訓練,而在generation_config.json中,這兩個字段用于生成文本時的參數設置
  • config.json 提供模型的基本信息,而 generation_config.json 則細化為生成任務的具體需求

3、詞匯表文件

詞匯表文件包含了模型使用的詞匯表或標記器信息,是自然語言處理模型理解和生成文本的基礎。

  • tokenizer.jsontokenizer_config.json
3.1 tokenizer.json
  • tokenizer.json包含了模型使用的詞匯表信息,如詞匯表的大小、特殊標記的ID等
  • tokenizer.json的基本結構如下:

{"version": "1.0","truncation": {"max_length": 128,"strategy": "longest_first"},"padding": {"side": "right","pad_id": 0,"pad_token": "[PAD]"},"added_tokens": [{"id": 128010,"content": "[CUSTOM]"}],"normalizer": {"type": "NFD","lowercase": true,"strip_accents": true},"pre_tokenizer": {"type": "ByteLevel","add_prefix_space": true},"post_processor": {"type": "AddSpecialTokens","special_tokens": {"cls_token": "[CLS]","sep_token": "[SEP]"}},"decoder": {"type": "ByteLevel"},"model": {"type": "BPE",...}
}
  • 其中truncation是定義截斷策略,用于限制輸入序列的最大長度,padding用于統一輸入序列的長度,added_tokens列出分詞器額外添加到詞匯表中的特殊標記或自定義標記
  • normalizer用于定義文本標準化的步驟和規則,用于在分詞前對輸入文本進行預處理,pre_tokenizer定義分詞器如何將輸入文本分割為初步的tokens,post_processor定義分詞后處理的步驟
  • decoder定義如何將tokens ID 序列解碼回原始文本,model定義了分詞器的模型信息,如詞匯表、合并規則(對于 BPE)等
3.2 tokenizer_config.json
  • tokenizer_config.json是用于生成文本的配置文件,包含了生成文本時的參數設置,如max_lengthtemperaturetop_k
  • tokenizer_config.json的基本結構如下:

{"added_tokens_decoder": [],"bos_token": "begin_of_text |>","clean_up_tokenization_spaces": true,"eos_token": "<|end_of_text|>","model_input_names": ["input_ids", "attention_mask"],"model_max_length": 1000000,"tokenizer_class": "PreTrainedTokenizerFast"
}

  • 其中added_tokens_decoder定義分詞器在解碼(將 token ID 轉換回文本)過程中需要額外處理的特殊標記或自定義標記
  • bos_token、eos_token定義開始、結束標記,clean_up_tokenization_spaces定義了是否清除分詞后的多余空格等
  • tokenizer.json和tokenizer_config.json的區別:tokenizer.json側重于分詞器的訓練和加載,而tokenizer_config.json更側重于生成文本時的參數設置

為什么很多模型都沒有 vocab.txt 了?現代分詞器采用了更為豐富和靈活的文件格式,如 tokenizer.json,以支持更復雜的分詞策略和特殊標記處理

一、背景介紹

在AI模型部署領域,模型格式的選擇直接影響推理效率、內存占用和跨平臺兼容性。Safetensors和GGUF作為兩種重要格式,分別服務于不同的應用場景:

  1. Safetensors
  2. 基于protobuf的二進制格式,提供安全的張量存儲
  3. 支持分片(sharding)和加密功能
  4. 廣泛用Hugging Face生態系統
  5. 典型應用:模型微調、分布式訓練
  6. GGUF
  7. 基于GGML生態的新型格式(GGML v2)
  8. 針對CPU推理優化的內存布局
  9. 支持多種量化模式(4/5/8bit)
  10. 典型應用:邊緣設備部署、低資源環境

本文將詳細講解如何通過Transformers框架將Safetensors模型轉換為GGUF格式,并深入探討轉換過程中的關鍵技術細節。

二、轉換原理與核心流程

2.1 格式轉換的本質

Safetensors到GGUF的轉換本質是: 1. 張量數據的序列化格式轉換 2. 內存布局的優化重組 3. 可選的量化參數調整

2.2 核心轉換流程

graph TDA[Safetensors模型] --> B[加載模型權重]B --> C[轉換為PyTorch張量]C --> D[執行量化操作]D --> E[生成GGUF格式文件]E --> F[驗證輸出文件]

三、環境準備

3.1 依賴安裝

# 安裝Transformers庫
pip install transformers# 安裝GGUF工具鏈
pip install llama-cpp-python

3.2 硬件要求

  • CPU:Intel/AMD x86-64架構(推薦支持AVX2指令集)
  • 內存:至少為模型未量化狀態的2倍
  • 存儲:SSD推薦(處理大模型時提升速度)

公司環境 .

四、轉換步驟詳解

4.1 加載Safetensors模型

from transformers import AutoTokenizer, AutoModelForCausalLMmodel_name = "Qwen/Qwen2.5-VL-32B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="gpu")
tokenizer = AutoTokenizer.from_pretrained(model_name)

4.2 初始化GGUF轉換器

from llama_cpp import GGUFConverterconverter = GGUFConverter(model=model,tokenizer=tokenizer,max_seq_len=2048,target_format="ggufv2"
)

4.3 執行轉換操作

output_path = "Qwen2.5-VL-32B-Instruct.gguf"
converter.convert(output_path=output_path,quantization="q4_0",  # 可選量化模式force=True            # 覆蓋已有文件
)

4.4 驗證轉換結果

from llama_cpp import Llamallm = Llama(model_path=output_path,n_ctx=2048,n_threads=8
)prompt = "你好,我是jettech"
output = llm(prompt, max_tokens=512)
print(output["choices"][0]["text"])

五、高級配置選項

5.1 量化參數設置

參數名稱說明推薦值
quantization量化模式"q4_0"
group_size量化分組大小(影響精度)128
use_mmap使用內存映射加速加載True

5.2 內存優化策略

# 啟用內存優化模式
converter = GGUFConverter(...,memory_friendly=True,temp_dir="/tmp/gguf_conversion"
)

六、常見問題與解決方案

6.1 轉換失敗處理

  • 錯誤信息Invalid tensor shape
    解決方案:檢查模型架構是否兼容(需為CausalLM類型)
  • 錯誤信息Out of memory
    解決方案:分塊處理模型(使用chunk_size參數)

七、格式對比與應用場景

7.1 關鍵指標對比

指標SafetensorsGGUF
典型文件大小原始浮點數量化后1/4-1/8
加載速度較慢(需反序列化)極快(內存映射)
推理速度CPU/GPU優化CPU極致優化
跨平臺支持全平臺x86/ARM

7.2 適用場景推薦

  • Safetensors:模型訓練、GPU推理、云服務部署
  • GGUF:邊緣設備、低功耗CPU、嵌入式系統

八、未來發展趨勢

  1. 多模態支持:GGUF計劃支持圖像/音頻模型
  2. 動態量化:運行時自適應量化技術
  3. 生態整合:Hugging Face官方可能提供直接轉換工具

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76456.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76456.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76456.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

K8S微服務部署及模擬故障觀測

概述 本文介紹了如何在 Kubernetes (K8S) 集群中部署微服務&#xff0c;并模擬常見的故障場景&#xff08;如 Pod 故障、節點故障、網絡故障&#xff09;以測試系統的容錯能力。通過本實驗&#xff0c;了解 Kubernetes 的自動恢復機制以及如何通過監控和日志分析快速定位和解決…

OpenStack Yoga版安裝筆記(23)Swift安裝

一、官方文檔 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、環境準備 之前的實驗&#xff0c;已經有controller, compute1, block1節點&#xff0c;并已經完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安裝。 此處新增…

06-libVLC的視頻播放器:推流RTMP

創建媒體對象 libvlc_media_t* m = libvlc_media_new_path(m_pInstance, inputPath.toStdString().c_str()); if (!m) return -1; // 創建失敗返回錯誤 libvlc_media_new_path:根據文件路徑創建媒體對象。注意:toStdString().c_str() 在Qt中可能存在臨時字符串析構問題,建議…

少兒編程路線規劃

少兒編程路線規劃—一文寫明白 現在有很多的編程機構&#xff0c;五花八門的。我有幸也見識到了大家的營銷策略。這些策略有黑有白吧&#xff0c;從業幾年&#xff0c;沉淀下來一些客戶角度的干貨&#xff0c;分享給大家。 如果是想以很遠很遠的就業為目的&#xff0c;畢業就…

ios app的ipa文件提交最簡單的方法

ipa文件是ios的app打包后生成的二級制文件&#xff0c;在上架app store connect或做testflight測試的時候&#xff0c;它提示我們需要使用xcode、transporter或xcode命令行等方式來上傳。 而xcode、transporter或xcode命令行的安裝都需要使用mac電腦&#xff0c;假如沒有mac電…

怎么查看LLM Transformer 架構進行并行計算和設備映射

怎么查看LLM Transformer 架構進行并行計算和設備映射 num_hidden_layers = model.config.num_hidden_layers print(num_hidden_layers) print(model) LLM(大語言模型)通常是基于 Transformer 架構 構建的,它由多個模塊化的層(Layer)堆疊組成,每個層都有其獨特的作用。…

微信小程序獲得當前城市,獲得當前天氣

// // 獲取用戶當前所在城市 // wx.getLocation({// type: wgs84, // 默認為 wgs84 返回 gps 坐標,gcj02 返回可用于 wx.openLocation 的坐標 // success: function(res) {// console.log(獲取位置成功, res); // // 使用騰訊地圖API進行逆地址解析 // wx…

美國國土安全部終止資助,CVE漏洞數據庫項目面臨停擺危機

&#xff08;圖片來源&#xff1a;Jerome460 / Shutterstock&#xff09; 25年漏洞追蹤體系即將終結 美國非營利研發組織MITRE宣布&#xff0c;其與美國國土安全部&#xff08;DHS&#xff09;簽訂的"通用漏洞披露&#xff08;CVE&#xff09;"數據庫維護合同將于2…

Kafka下載和使用(Windows版)

Apache Kafka 是一個高吞吐量的分布式消息系統&#xff0c;廣泛應用于日志收集、實時流處理等場景。本文將以 Windows 系統為例&#xff0c;詳細介紹 Kafka 的安裝和使用方法。 一、安裝方式 在 Windows 系統上運行 Apache Kafka&#xff0c;通常有兩種方式&#xff1a; 1.W…

RBAC的使用

1、簡述RBAC的作用及工作流程 Rbac基于角色訪問控制&#xff0c;用于管理用戶對集群資源的訪問權限&#xff0c;通過定義角色和綁定規則&#xff0c;將用戶與權限進行關聯&#xff0c;作用&#xff1a;權限精細化管理&#xff0c;操作便捷與統一管理&#xff0c;動態調整權限。…

【2025年泰迪杯數據挖掘挑戰賽】A題 數據分析+問題建模與求解+Python代碼直接分享

目錄 2025年泰迪杯數據挖掘挑戰賽A題完整論文&#xff1a;建模與求解Python代碼1問題一的思路與求解1.1 問題一的思路1.1.1對統計數據進行必要說明&#xff1a;1.1.2統計流程&#xff1a;1.1.3特殊情況的考慮&#xff1a; 1.2 問題一的求解1.2.1代碼實現1.2.2 問題一結果代碼分…

Ethan獨立開發產品日報 | 2025-04-18

1. Wiza Monitor 跟蹤工作變動&#xff0c;并獲取 Slack 和電子郵件通知。 Wiza Monitor是一款工作變動跟蹤工具&#xff0c;可以實時追蹤客戶和潛在客戶的職位變動&#xff0c;您還能通過電子郵件和Slack接收提醒&#xff0c;并自動更新您的客戶關系管理系統&#xff08;CRM…

【工具變量】A股上市公司信息披露質量KV指數測算數據集(含do代碼 1991-2024年)

KV指數&#xff08;Key Value Index&#xff09;作為評估信息披露質量的關鍵指標&#xff0c;在證券市場&#xff0c;尤其是A股市場上市公司信息披露監管與評估中占據重要地位。該指數通過系統化、定量化的方法&#xff0c;對企業發布的信息進行全面剖析與打分&#xff0c;精準…

【java實現+4種變體完整例子】排序算法中【基數排序】的詳細解析,包含基礎實現、常見變體的完整代碼示例,以及各變體的對比表格

基數排序詳解及代碼示例 基數排序原理 基數排序通過處理每一位數字進行排序&#xff0c;分為 LSD&#xff08;最低位優先&#xff09; 和 MSD&#xff08;最高位優先&#xff09; 兩種方式。核心步驟&#xff1a; 確定最大值&#xff1a;計算數組中最大數的位數。逐位排序&am…

服務治理-服務發現和負載均衡

第一步&#xff1a;引入依賴 第二步&#xff1a;配置地址 改寫購物車服務的代碼 負載均衡成功實現。 假如有一個服務掛了&#xff0c;比如說8081&#xff0c;cart-service能不能正常訪問&#xff0c;感知到。 再重新啟動8081端口。 不管服務宕機也好&#xff0c;還是服務剛啟動…

專題十六:虛擬路由冗余協議——VRRP

一、VRRP簡介 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;虛擬路由冗余協議通過把幾臺設備聯合組成一臺虛擬的設備&#xff0c;使用一定的機制保證當主機的下一跳設備出現故障時&#xff0c;及時將業務切換到備份設備&#xff0c;從而保持通訊的連續性和…

UE5 關卡序列

文章目錄 介紹創建一個關卡序列編輯動畫添加一個物體編輯動畫時間軸顯示秒而不是幀時間軸跳轉到一個確定的時間時間軸的顯示范圍更改關鍵幀的動畫插值方式操作多個關鍵幀 播放動畫 介紹 類似于Unity的Animation動畫&#xff0c;可以用來錄制場景中物體的動畫 創建一個關卡序列…

openbmb/MiniCPM-V-2_6 和 AIDC-AI/Ovis2-1B 的網絡結構體對比

openbmb/MiniCPM-V-2_6和Ovis2作為多模態大模型&#xff0c;在架構設計上既有共性也有顯著差異。以下從核心模塊、技術實現和任務適配三個維度展開對比分析&#xff1a; 一、核心模塊架構對比 1. 視覺編碼器 MiniCPM-V-2_6&#xff1a; 架構&#xff1a;基于SigLIP-400M輕量級…

鴻蒙學習筆記(5)-HTTP請求數據

一、Http請求數據 http模塊是鴻蒙內置的一個模塊&#xff0c;提供了網絡請求的能力。不需要再寫比較原始的AJAS代碼。 ps:在項目中如果要訪問網絡資源&#xff0c;不管是圖片文件還是網絡請求&#xff0c;必須給項目開放權限。 &#xff08;1&#xff09;網絡連接方式 HTTP數…

使用Redis5.X部署一個集群

文章目錄 1.用Redis5.x來創建Cluste2. 查看節點信息 nodes3. 添加節點 add-node4.刪除節點 del-node5.手動指定從節點 replicate6.檢查集群健康狀態 check 建議使用5.x版本。 首先&#xff0c;下載Redis&#xff0c;根據自己的環境選擇版本。 一鍵啟動Redis集群文件配置。 ech…