跳轉到主要內容
工程的博客

MLflow貝葉斯實驗跟蹤

2021年10月18日 工程的博客

分享這篇文章

這篇文章是第三個在貝葉斯推理係列([1],[2])。在這裏,我們將介紹如何使用管理MLflow執行和跟蹤貝葉斯PyMC3實驗使用Python包。這導致係統性和可再生的實驗毫升管道,可以共享數據科學團隊由於版本控製和可變跟蹤特性。MLflow跟蹤的數據可以通過托管服務提供訪問數據磚使用UI或API。數據科學家們不使用托管MLflow服務可以使用API來訪問實驗和相關的數據。磚,對數據的訪問和管理不同的模型通過MLflow提供的ACL。模型可以很容易通過各種productionized和部署框架。

貝葉斯跟蹤實驗

MLflow做什麼工作?

MLflow毫升生命周期管理是一個開源框架。MLflow可以使用托管服務用於磚或可以作為一個獨立的安裝部署使用可用的開源庫。這篇文章主要涉及實驗跟蹤,但我們也會分享MLflow如何幫助訓練模型存儲在一個中央存儲庫和模型部署。在跟蹤,MLflow允許您存儲:

  1. 指標——通常是相關的模型的性能,如異常或小紅帽。
  2. 參數變量,幫助定義您的模型或運行。在貝葉斯設置,這可以成為你hyperparameter,之前或hyperprior分布參數。注意,這些都是存儲為字符串值。
  3. 標簽——鍵值來跟蹤信息關於您的運行,如信息的主要修改代碼以添加一個特性。
  4. 指出,任何信息關於您的運行,您可以輸入MLflow UI。這可能是一個定性評估的運行結果,可以相當有用的工具對係統的實驗。
  5. 工件——這個商店的副產品或輸出實驗等文件,圖片,等等。

為開源MLflow建立一個商店

本節隻適用於開源MLflow部署,因為這是自動照顧與托管MLflow磚。MLflow後端存儲和工件存儲。顧名思義,工件存儲保存所有工件(包括元數據)與模型相關的運行和其他一切存在於後端存儲。如果您正在運行在本地MLflow,您可以配置後端存儲,可以是一個文件存儲或數據庫支持的存儲。你可以在任何地方運行跟蹤服務器如果你選擇,如下所示:

mlflow服務器\——backend-store-uri / mnt /存在於磁盤上\——default-artifact-root s3: / / my-mlflow-bucket / \——主機0.0.0.0

然後,您可以指定跟蹤服務器上麵設置為:

mlflow.set_tracking_uri (“http://YOUR-SERVER: 4040”)

工作流跟蹤一個貝葉斯的實驗

在磚上,所有的這些都是為你管理,最小化所需的配置時間開始您的模型開發工作流程。然而,以下都應適用於管理和opne-source MLflow部署。MLflow創建一個實驗中,由一個實驗ID標識,每個實驗由一係列的運行確認使用運行ID。每次運行的相關參數和工件每運行記錄。這裏是創建一個工作流的步驟:

  1. 創建一個實驗,通過實驗的文件夾的路徑,這將返回一個實驗ID。您可以提供一個路徑來存儲您的工件,如文件、照片等。
  2. 開始實驗與實驗ID返回從上麵的步驟。經理PyMC3推理代碼在這個上下文。
  3. 使用標簽版本代碼和數據使用。
  4. 日誌模型/運行參數,特別是前和hyperprior分布參數、樣本的數量和調優樣本和的可能性分布。
mlflow.set_tags ({“版本筆記”:“運行”,“開始日期”:covid_data.data_begin,“結束日期”:covid_data.data_end})mlflow.set_tags ({“版本筆記”:“運行”,“開始日期”:covid_data.data_begin,“結束日期”:covid_data.data_end})nsamples =2000年ntune =2000年Hyperprior = {“λ的意思”:0.75,“λ性病”:2,“μ的意思”:0.75,“μ性病”:2}之前= {“λ性病”:1.0,“μ性病”:1.0}={可能性“名稱”:“正常”,“參數”:{“性病”:0.01}}prior_lam = pm.Lognormal (“prior_lam”,Hyperior [“λ的意思”],Hyperior [“λ性病”])prior_mu = pm.Lognormal (“prior_mu”,Hyperprior [“μ的意思”],Hyperprior [“μ性病”])prior_lam_std = pm.HalfNormal (“prior_lam_std”之前,(“λ性病”])prior_mu_std = pm.HalfNormal (“prior_mu_std”之前,(“μ性病”])林= pm.Lognormal (“λ”=,prior_lam_std prior_lam形狀2)μ= pm.Lognormal (“畝”=,prior_mu_std prior_mu形狀2)mlflow.log_param (“Hyperprior”Hyperprior)mlflow.log_param (“之前”之前,)mlflow.log_param (“樣本”nsamples)mlflow.log_param (“優化樣本”ntune)mlflow.log_param (“可能性”可能性)
  1. 一旦模型完成抽樣,結果中包含跟蹤可以保存為一個工件使用log_artifacts()方法。這將是一個文件夾叫“跟蹤”,包含所有的信息的樣本由每一個鏈。跟蹤信息可以通過調用PyMC3總結總結()方法在跟蹤對象。跟蹤總結是一個數據幀,可以保存為一個JSON字符串對象使用log_text MLflow()方法。
trace_summary = az.summary(跟蹤)res = trace_summary.to_json(東方=“指數”)read_json = json.dumps (res)mlflow。log_text (read_json artifact_file =“trace_summary”)pm.save_trace(跟蹤,目錄=“跟蹤”覆蓋=真正的)os.system (“cp - r跟蹤/ dbfs /用戶/用戶名/ mlflow ')mlflow.log_artifacts (' / dbfs /用戶/用戶名/ mlflow /跟蹤的artifact_path =“跟蹤”)mlflow.end_run ()

檢查一個實驗

一旦實驗已經完成,你可以回去檢查MLflow UI或編程方式提取運行信息。例如,如果當前實驗ID是‘10618537’,你可以提取實驗的信息:

客戶= mlflow.tracking.MlflowClient ()實驗= mlflow.get_experiment (10618537)打印(實驗)艾德<實驗:artifact_location =“dbfs: /磚/ mlflow-tracking / 10618537”experiment_id =“10618537”lifecycle_stage =“活躍”name =“/用戶/用戶名/ mlflow_hier_bayesian”標簽=“{mlflow.experimentType:”>
              
              < /實驗:>

尋找一個實驗

假設你知道你實驗ID,您可以搜索所有運行在一個實驗和提取數據存儲運行,如下表示:

> > >mlflow。search_runs (experiment_ids = (“10618537”])

MLflow貝葉斯實驗跟蹤

運行= client.get_run (“393287 b22e59466dadbaea85052782a9”)打印(run.data)從rundata:派生<指標=“{}”,params =“{Hyperprior:”意思是=”“std =”“標簽=“{”結束日期=”“筆記=”“工件=”“>從rundata:派生< / >

訪問的工件從一個運行

與此相關的構件運行可以列出如下所示。文件大小和路徑為每個文件所示

f = client.list_artifacts (run_id)打印(f)(< fileinfo: file_size =“1808”,is_dir =“假的,”路徑=“trace_summary”>,< FileInfo: file_size =沒有一個is_dir =真正的路徑=“跟蹤”>)< / fileinfo: >

MLflow為每個運行管理構件,但是他們可以查看和下載一個使用UI或使用API來訪問它們。在下麵的示例中,我們負荷跟蹤信息和跟蹤總結之前運行。

local_path_summary = client.download_artifacts (run_id,“trace_summary”,“。/”)local_path_trace = client.download_artifacts (run_id,“跟蹤”,“。/”)打印(“工件下載:{}”格式(local_path_summary))打印(“工件下載:{}”格式(local_path_trace))開放(local_path_summary“r”)作為f:data = json.load (f)trace_summary = pd.read_json(數據)pm.Model ()作為模型:trace2 = pm.load_trace (local_path_trace)data_load = az.from_pymc3 (trace = trace2)az.plot_posterior (trace2.get_values (“R0”)(:,0])az.plot_posterior (trace2.get_values (“R0”)(:,1])

如果你運行上麵的,你會注意到跟蹤總結包含相同的信息。參數的估計,從工件加載文件或跟蹤總結,現在的分布,成為當前的參數模型。如果需要的話,我們可以繼續適應新的數據模型通過使用當前的先驗估計後驗未來的訓練周期。

結論

在這篇文章中,我們看到了一個如何使用MLflow係統地使用PyMC3執行貝葉斯實驗。MLflow提供的日誌記錄和跟蹤功能可以通過訪問提供的托管MLflow磚或開源的用戶通過API。模型和模型總結可以保存為工件和可以共享或重新加載到PyMC3在稍後的時間。

要了解更多,請查看連接筆記本電腦

檢查筆記本為貝葉斯學習更多關於MLflow管理實驗。了解更多關於貝葉斯推理在我Coursera課程:

免費試著磚
看到所有工程的博客的帖子
Baidu
map