99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

PyTorch 大規(guī)模部署的功能

2020-09-11 09:27 更新
原文: https://pytorch.org/docs/stable/notes/large_scale_deployments.html

本說明討論了一些擴展點和技巧,這些擴展點和技巧在較大的系統(tǒng)中運行 PyTorch 或在較大的組織中使用 PyTorch 操作多個系統(tǒng)時可能有用。

它不涉及將模型部署到生產中的主題。 檢查 torch.jit 或相應的教程之一。

該注釋假定您是從組織中的源代碼構建 PyTorch 的,或者能夠靜態(tài)鏈接使用 PyTorch 時要加載的其他代碼。 因此,許多鉤子都公開為 C ++ API,可以在集中式位置(例如, 在靜態(tài)初始化代碼中。

整個機隊的運營商配置文件

PyTorch 帶有torch.autograd.profiler,能夠測量各個操作員根據需要花費的時間。 可以使用相同的機制對運行 PyTorch 的任何進程進行“始終在線”測量。 收集有關在給定進程中或在整個機器組中運行的 PyTorch 工作負載的信息可能很有用。

可以使用torch::autograd::profiler::pushCallback添加用于任何操作員調用的新回調。 掛鉤將使用描述調用上下文的torch::autograd::profiler::RecordFunction結構調用(例如<cite>名稱</cite>)。 如果啟用,RecordFunction::inputs()包含表示為torch::IValue變量類型的函數的參數。 注意,輸入日志記錄相對昂貴,因此必須顯式啟用。

操作員回調還可以訪問at::getThreadLocalDebugInfo()接口,該接口返回指向包含調試信息的結構的指針。 該調試信息應該與相應的at::setThreadLocalDebugInfo(debug_info)調用一起設置。 調試信息通過前向傳播(包括異步fork任務)和后向傳播進行傳播,對于將有關執(zhí)行環(huán)境的一些額外信息(例如,模型 ID)從應用程序的高層傳遞到操作員回調非常有用。

調用回調會增加一些開銷,因此通常隨機抽樣操作員調用很有用。 可以在每個回調的基礎上啟用 <cite>torch :: autograd :: profiler :: setSamplingProbability</cite> 指定的全局采樣率。

請注意,pushCallbacksetSamplingProbability不是線程安全的,只有在沒有運行 PyTorch 運算符時才能調用。 通常,在初始化過程中一次調用它們是一個好主意。

這是一個例子:

// Called somewhere in the program beginning
void init() {
    // Sample one in a hundred operator runs randomly
    torch::autograd::setSamplingProbability(0.01);
    pushCallback(
        &onFunctionEnter,
        &onFunctionExit,
        /* needs_inputs */ true,
        /* sampled */ true
    );
}


void onFunctionEnter(const RecordFunction& fn) {
    std::cerr << "Before function " << fn.name()
              << " with " << fn.inputs().size() << " inputs" << std::endl;
}


void onFunctionExit(const RecordFunction& fn) {
    std::cerr << "After function " << fn.name();
}

API 使用記錄

在更廣泛的生態(tài)系統(tǒng)中運行時(例如在托管的工作計劃程序中),跟蹤哪些二進制文件調用特定的 PyTorch API 通常很有用。 在幾個重要的 API 點注入了簡單的工具,這些工具會觸發(fā)給定的回調。 由于通常在一次性 python 腳本中調用 PyTorch,因此對于每個 API 的給定進程,回調僅觸發(fā)一次。

c10::SetAPIUsageHandler可用于注冊 API 使用情況檢測處理程序。 傳遞的參數將是“ api key”,用于標識使用的點,例如,用于 PyTorch 擴展名導入的python.import或觸發(fā) TorchScript 編譯的torch.script.compile。

SetAPIUsageLogger([](const std::string& event_name) {
    std::cerr << "API was used: " << event_name << std::endl;
});

開發(fā)人員注意:可以在代碼中使用 C ++中的C10_LOG_API_USAGE_ONCE("my_api")或 Python 中的torch._C._log_api_usage_once("my.api")添加新的 API 觸發(fā)點。

將元數據附加到已保存的 TorchScript 模型中

TorchScript 模塊可以保存為存檔文件,該文件將序列化的參數和模塊代碼捆綁為 TorchScript(請參見 torch.jit.save())。 將附加信息與模型捆綁在一起通常很方便,例如,模型生產者或輔助工件的描述。

可以通過將_extra_files<>參數傳遞給 torch.jit.save() 和torch::jit::load<>在存儲過程中存儲和檢索任意二進制 Blob 來實現(xiàn)。 由于 TorchScript 文件是常規(guī)的 ZIP 存檔,因此額外的信息將作為常規(guī)文件存儲在存檔的extra/<>目錄中。

還有一個全局掛鉤,可將其他文件附加到當前流程中生成的任何 TorchScript 存檔中。 用生產者元數據標記模型可能很有用,類似于由數碼相機產生的 JPEG 元數據。 用法示例如下所示:

SetExportModuleExtraFilesHook([](const script::Module&) {
    script::ExtraFilesMap files;
    files["producer_info.json"] = "{\"user\": \"" + getenv("USER") + "\"}";
    return files;
});

構建環(huán)境注意事項

TorchScript 的編譯需要使用 python 的inspect.getsource<>調用,因此必須有權訪問原始 python 文件。 在某些生產環(huán)境中,可能需要顯式部署.py文件以及預編譯的.pyc文件。

通用擴展點

PyTorch API 通常是松散耦合的,很容易用專用版本替換組件。 常見的擴展點包括:

  • 使用 C ++實現(xiàn)的自定義運算符-有關更多詳細信息,請參見教程。
  • 自定義數據讀取通??梢酝ㄟ^調用相應的 python 庫直接集成。 torch.utils.data 的現(xiàn)有功能可以通過擴展 Dataset 或  IterableDataset 加以利用。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號