# llama.cpp - [How does llama.cpp works ? #4531](https://github.com/ggml-org/llama.cpp/discussions/4531) - [Understanding how LLM inference works with llama.cpp](https://www.omrimallis.com/posts/understanding-how-llm-inference-works-with-llama-cpp/) - BitNet 使用的 llama.cpp - https://deepwiki.com/Eddie-Wang1120/llama.cpp/ - https://deepwiki.com/ggml-org/llama.cpp ## 現行 llama.cpp 的 mmap 載入機制 - llama.cpp 啟動時,載入模型 mmap() 呼叫的完整 call stack | 函式 / 呼叫位置 | 功能說明 | | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | **`llama_model_load_from_file()`**<br>(`llama.cpp`) | 模型載入流程的主入口。使用者呼叫此函式載入 GGUF 模型。 | | └── `llama_model_load_from_file_impl()`<br>(`llama.cpp`) | 實作細節,負責開啟檔案、檢查版本與初始化載入流程。 | | └── `llama_model_load()`<br>(`llama.cpp`) | 實際建立模型的物件,並準備所有模型需要的元資料與張量映射。 | | └── `llama_model_loader ml(...)`<br>(建構子)❗ | 建構 `llama_model_loader`,啟動模型檔案讀取流程,包括張量表頭解析、初始化記憶體映射。 | | └── `llama_model_loader::llama_model_loader()`<br>(`llama-model-loader.cpp`) | 解析 GGUF 模型的 metadata 和張量索引,並呼叫 `init_mappings()` 執行實際的記憶體映射。 | | └── `init_mappings(...)`<br>(`llama-model-loader.cpp`) | 決定如何將模型張量資料映射進記憶體,通常使用 `std::make_unique<llama_mmap>()` 初始化對應的 backend loader。 | | └── `std::make_unique<llama_mmap>()`<br>(`llama-model-loader.cpp`)❗ | 建立 `llama_mmap` 物件,並準備好模型張量的讀取接口(從磁碟 mmap 到虛擬記憶體)。 | | └── `llama_mmap::llama_mmap()`<br>(`llama-mmap.cpp`) | 實作記憶體映射邏輯,接收檔案描述子與大小,執行 `mmap()` 映射整個檔案。 | | └── `mmap(...)`<br>(`llama-mmap.cpp`)✅ | 實際呼叫 Linux 系統的 `mmap()` 系統呼叫,將模型檔案映射至虛擬位址空間,延遲加載(page fault 發生時才讀入頁面)。 |
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up