加密模型與資源
加密 AI 模型與其他二進位資產,並在執行期讀回它們,全程不落地為明文檔案。
magiclock protect-model 會把模型、權重檔案或任何其他資源加密成一個 .enc 信封。你的應用程式會在執行期用 bootstrap() + open_model() 在記憶體中解密——明文位元組永遠不會落地到磁碟。
加密一個模型
shell
magiclock protect-model models/face.onnx # -> models/face.onnx.enc
magiclock protect-model weights/net.pt --feature ai_model -o net.enc--feature 用來指定解鎖它所需的授權能力,預設是 ai_model。加密程式碼裡的有效期(--trial / --expires-in / --expires-at)、便攜(--no-bind-machine、--passphrase、--emit-key)與 --lock-passphrase 旗標,在這裡同樣適用。
在執行期讀回它
python
import magiclock
import onnxruntime
magiclock.bootstrap() # brings the gate up against this machine's license
model_bytes = magiclock.open_model("models/face.onnx.enc") # plaintext, in memory only
session = onnxruntime.InferenceSession(model_bytes)不論信封裡裝的是什麼,open_model() 的用法都相同——ONNX、PyTorch state dict、原始權重陣列,或是設定檔、資料集這類任意二進位資源。傳進去的是 bytes,讀出來的也是 bytes。
函式參考
| 簽章 | 說明 | |
|---|---|---|
magiclock.bootstrap() | bootstrap(vault_dir=None, *, app_version="1.0.0") -> MagicLockRuntime | 在任何 open_model()(或受閘控的程式碼)執行前呼叫一次即可。magiclock build 會在編譯產物的進入點自動插入這個呼叫——只有一般(未編譯)指令碼才需要你自己呼叫。若這台機器尚未啟用,會拋出例外。 |
magiclock.open_model() | open_model(path, *, vault_dir=None, passphrase=None, key=None) -> bytes | 會自動判斷是機器鎖定還是便攜信封。便攜或二因子產物請傳入 passphrase/key,而不要走互動式提示。 |
完整的例外與邊界情況,見 Python API 參考。
每一次都只存在於記憶體
解密後的模型位元組只會在你持有參照期間存在於處理程序的記憶體中——open_model() 從不把明文副本寫到磁碟、暫存目錄或任何其他地方。如果你的推論框架需要的是檔案路徑而不是位元組,請把它放在記憶體內的位置(例如記憶體內的檔案物件),而不要自己把它寫到磁碟上,否則明文就會落到 MagicLock 保護範圍之外。