llama.cpp

現行 llama.cpp 的 mmap 載入機制

  • llama.cpp 啟動時,載入模型 mmap() 呼叫的完整 call stack
函式 / 呼叫位置 功能說明
llama_model_load_from_file()
llama.cpp
模型載入流程的主入口。使用者呼叫此函式載入 GGUF 模型。
└── llama_model_load_from_file_impl()
llama.cpp
實作細節,負責開啟檔案、檢查版本與初始化載入流程。
└── llama_model_load()
llama.cpp
實際建立模型的物件,並準備所有模型需要的元資料與張量映射。
└── llama_model_loader ml(...)
(建構子)❗
建構 llama_model_loader,啟動模型檔案讀取流程,包括張量表頭解析、初始化記憶體映射。
└── llama_model_loader::llama_model_loader()
llama-model-loader.cpp
解析 GGUF 模型的 metadata 和張量索引,並呼叫 init_mappings() 執行實際的記憶體映射。
└── init_mappings(...)
llama-model-loader.cpp
決定如何將模型張量資料映射進記憶體,通常使用 std::make_unique<llama_mmap>() 初始化對應的 backend loader。
└── std::make_unique<llama_mmap>()
llama-model-loader.cpp)❗
建立 llama_mmap 物件,並準備好模型張量的讀取接口(從磁碟 mmap 到虛擬記憶體)。
└── llama_mmap::llama_mmap()
llama-mmap.cpp
實作記憶體映射邏輯,接收檔案描述子與大小,執行 mmap() 映射整個檔案。
└── mmap(...)
llama-mmap.cpp)✅
實際呼叫 Linux 系統的 mmap() 系統呼叫,將模型檔案映射至虛擬位址空間,延遲加載(page fault 發生時才讀入頁面)。