【Horovod API】-- horovod.tensorflow.keras

本文這部分API是用於horovod編寫tensorflow2.0+程序時需要用到的。

官方原文直通車:https://horovod.readthedocs.io/en/latest/api.html#module-horovod.tensorflow.keras

官網國內時能打開時打不開。打不開就多試幾次。

純手打,禁止轉載。有錯誤請評論指出,感謝。

 

1.horovod.tensorflow.keras.init(comm=None)

功能:horovod初始化

參數:comm-一個指定通訊方式。可以是MPI_COMM_WORLD或MPI。默認爲None代表使用MPI_COMM_WORLD

2.horovod.tensorflow.keras.shutdown()

功能:關閉horovod

3.horovod.tensorflow.keras.size()

功能:獲取Horovod的processes數量。(翻譯補充:因爲horovod是每個GPU對應一個process,所以這個命令也相當於獲取所有使用的GPU數量)

返回:一個整數,int。

4.horovod.tensorflow.keras.local_size()

功能:獲取本地節點的processes數量。(翻譯補充:參考3中的解釋,本命令用於獲取本地節點所使用的GPU數量)

返回:一個整數,int。

5.horovod.tensorflow.keras.rank()

功能:獲取horovod中正在運行的process編號。(翻譯補充:假如horovod訓練使用3個節點,每個節點用2個GPU,則一共有6個線程同時工作,這6個線程的編號是0,1,2,3,4,5,這就是該命令返回值的範圍。)

返回:一個整數,int。

6.horovod.tensorflow.keras.local_rank()

功能:獲取當前節點下正在運行的process編號。(翻譯補充:假如horovod訓練使用3個節點,每個節點用2個GPU。則local——rank命令返回值範圍就是0或1,不會超過1。)

返回:一個整數,int。

7.horovod.tensorflow.keras.mpi_threads_supported()

功能:查詢是否支持MPI多線程。如果支持,則可以混合使用MPI庫,例如mpi4py。

返回:布爾值。支持返回True,不支持返回False。

8.horovod.tensorflow.keras.mpi_enabled()

功能:查看當前運行時下,MPI模式是否開啓。如果開啓可以在controller或data transfer operations中使用MPI。

返回:布爾值。開啓返回True,沒開啓返回False。

9.horovod.tensorflow.keras.mpi_built()

功能:查看當前horovod是否支持MPI編譯。

返回:布爾值。支持返回True,不支持返回False。

10.horovod.tensorflow.keras.gloo_enabled()

功能:查看當前運行時下,gloo模式是否開啓。(皮一下:這裏官方文檔多寫了個is,看他啥時候改)

返回:布爾值。開啓返回True,沒開啓返回False。

11.horovod.tensorflow.keras.gloo_built()

功能:查看當前horovod是否支持MPI編譯。

返回:布爾值。支持返回True,不支持返回False。

12.horovod.tensorflow.keras.nccl_built()

功能:查看當前horovod是否支持NCCL編譯。

返回:布爾值。支持返回True,不支持返回False。

13.horovod.tensorflow.keras.ddl_built()

功能:查看當前horovod是否支持DDL編譯。

返回:布爾值。支持返回True,不支持返回False。

14.horovod.tensorflow.keras.ccl_built()

功能:查看當前horovod是否支持CCL編譯。

返回:布爾值。支持返回True,不支持返回False。

15. class horovod.tensorflow.keras.Compression

功能:選擇allreduce過程中想要使用的梯度計算方法。

16.horovod.tensorflow.keras.DistributedOptimizer(optimizername=Nonedevice_dense=''device_sparse=''compression=<class 'horovod.tensorflow.compression.NoneCompressor'>sparse_as_dense=False)

功能:封裝其他的keras.optimizers.Optimizer,從而能夠用於horovod自動根據實際GPU數量來計算allreduce過程的參數。

參數:

  • optimizer – 優化器(翻譯補充:就是和keras的優化器一樣。)

  • name – 梯度下降過程的可選名稱前綴。默認是“Distribution”+優化器類型。

  • device_dense – 計算dense tensors所用的設備. 如果horovod是用的HOROVOD_GPU_OPERATIONS,則默認設備是GPU.

  • device_sparse – 計算sparse tensors所用的設備. 如果horovod是用的HOROVOD_GPU_OPERATIONS,則默認設備是GPU.

  • compression – 指定reduce過程的壓縮算法(Compression algorithm)。默認是不使用任何壓縮算法的。

  • sparse_as_dense – 將全部稀疏梯度(sparse gradients)當作稠密張量(dense tensors)。如果原始sparse gradients有很高的稠密性,則 開啓這個功能有助於提高性能和內存利用率。默認不開啓。

17.horovod.tensorflow.keras.broadcast_global_variables(root_rank)

功能:將全部全局變量(global variables)從root_rank廣播給其他所有進程(ranks)。

參數:root_rank – 要發出廣播的rank,就是廣播站。(正整數 uint)

18.horovod.tensorflow.keras.allreduce(valuename=Noneaverage=True)

功能:對tensor-compatible值進行allreduce操作。(翻譯補充,這個tensor-compatible還真不知道怎麼翻譯合適就沒翻譯。)

參數:

  • value – 一個需要reduce的tensor-compatible值。注:所有rank的輸入尺寸必須一致。

  • name – 此操作創建的常量的可選名。

  • average – 布爾值。如果是True代表reduce過程對所有ranks計算平均值。如果是False則計算總和(sum)。

19.horovod.tensorflow.keras.allgather(valuename=None)

功能:對tensor-compatible值進行allgather操作。(翻譯補充,這個tensor-compatible還真不知道怎麼翻譯合適就沒翻譯。)注:這個操作對輸入值的第一個維度進行連接,因此除第一個維度(0維度)外其他維度的形狀、尺度均需要保持一致。

參數:

  • value – 一個需要gather的tensor-compatible值。

  • name – 此操作創建的常量的可選名稱前綴。

20.horovod.tensorflow.keras.broadcast(valueroot_rankname=None)

功能:廣播一個tensor-compatible值給其他ranks。

參數:

  • value – 一個需要reduce的tensor-compatible值。注:所有rank的輸入尺寸必須一致。

  • root_rank – 要發出廣播的rank,就是廣播站。(正整數 uint)

  • name – 此操作創建的常量的可選名稱。

21.horovod.tensorflow.keras.load_model(filepathcustom_optimizers=Nonecustom_objects=Nonecompression=<class 'horovod.tensorflow.compression.NoneCompressor'>)

功能:加載一個Keras模型,並使用Horovod DistributedOptimizer。DistributedOptimizer會封裝底層的優化器,因此優化器狀態(相關參數、權重)都會被加載進來。默認情況下,keras.optimizers 模塊中的所有優化器都會被加載並封裝,無需custom_optimizers或custom_objects等特殊操作。

參數:

  • filepath – 字符串格式。保存模型的路徑;或h5py文件。

  • custom_optimizers – 模型加載時要支持的Optimizer子類的可選列表。列表(list)類型。

  • custom_objects – 反序列化過程中,可選映射名稱(字符串)到自定義類或函數的字典。字典類型。

  • compression – 布爾型。reduce過程中,每個worker節點對收發數據是否壓縮。默認爲不壓縮,即False。

返回:Keras模型實例。

Raises:

  • ImportError – h5py文件不可用。

  • ValueError – 非法的savefile。

22.class horovod.tensorflow.keras.callbacks.BroadcastGlobalVariablesCallback(root_rankdevice='')

功能:創建一個Keras Callback用於初始化階段容root_rank向其他所有ranks廣播(同步)全局變量。這是訓練初始化時必備的一步,用於讓所有works上的隨機初始化權重或從checkponts文件讀取的權重保持一致。

參數:

  • root_rank – 要發出廣播的rank號。(正整數 uint)

  • device – 發出廣播的設備。如果horovod是用HOROVOD_GPU_OPERATIONS的,則默認使用GPU。 

23. class horovod.tensorflow.keras.callbacks.MetricAverageCallback(device='')

功能:創建一個Keras Callback用於在每個epoch結束時計算所有進程中指標的均值。適合與ReduceLROnPlateau、TensorBoard等配合使用。 (再皮一下,官方文檔中conjunction少了個n,寫成conjuction了。)

參數:device – Allreduce過程使用的設備。如果horovod是用HOROVOD_GPU_OPERATIONS的,則默認使用GPU。 

24.class horovod.tensorflow.keras.callbacks.LearningRateScheduleCallback(multiplierstart_epoch=0end_epoch=Nonestaircase=Truemomentum_correction=Truesteps_per_epoch=Noneinitial_lr=None)

功能:在訓練過程(start_epochend_epoch過程)調整學習率。實際學習率=initial_lr * multipliermultiplier 可以是一個常數,也可以是一個以epoch爲自變量的函數即f(epoch) = lr’。

    如果multiplier 是一個函數,同時 staircase=True,學習率會在每個epoch開始前就被調整好,並且回傳給multiplier 函數的epoch參數是一個整數。(翻譯補充:這裏強調epoch是整數主要原因是和staircase=False情況做對比。)

    如果multiplier 是一個函數,同時 staircase=False,學習率同樣會在每個batch開始前就被調整好,但是回傳給multiplier 函數的epoch參數是一個浮點數,該浮點數epoch計算公式爲epoch‘=epoch+batch/steps_per_epoch。所以staircase的關閉主要是用於學習率的平滑調整。

注意:該API僅在v0.21.0版本及以上纔有。

參數:

  • multiplier – 如上面介紹的,是一個常數,或是一個關於epoch的函數。

  • start_epoch – 設置需要開始調整學習率epoch。默認爲0。正整數。

  • end_epoch – 設置一個epoch來停止調整學習率。默認爲None表示到訓練結束都一直調整學習率。正整數 or None。

  • staircase – 布爾量。決定學習率是逐epoch調整還是逐batch調整。默認爲False代表逐epoch調整。反之True代表逐batch調整。

  • momentum_correction – 布爾量。用於設置是否將動量校正應用於具有動量的優化器。默認True,即應用動量矯正。

  • steps_per_epoch – 如果Keras版本>=2.0.0則無需管這個參數。但如果是老版本要自己填steps_per_epoch值。正整數。具體可以參考Keras的API手冊。

  • initial_lr – 訓練開始的學習率值。浮點數。

25.class horovod.tensorflow.keras.callbacks.LearningRateWarmupCallback(warmup_epochs=5momentum_correction=Truesteps_per_epoch=Noneverbose=0initial_lr=None)

功能:用於實現學習率預熱(Warm up)設置。關於預熱(Warm up)訓練的詳情參見原論文https://arxiv.org/pdf/1706.02677.pdf

注意:該API僅在v0.21.0版本及以上纔有。

參數:

  • warmup_epochs – 設置預熱的epoch數量。默認爲5。正整數。

  • momentum_correction – 布爾量。用於設置是否將動量校正應用於具有動量的優化器。默認True,即應用動量矯正。

  • steps_per_epoch – 如果Keras版本>=2.0.0則無需管這個參數。但如果是老版本要自己填steps_per_epoch值。正整數。具體可以參考Keras的API手冊。

  • verbose – 詳細模式。0或1。默認0代表關閉詳細模式。

  • initial_lr – 訓練開始的學習率值。浮點數。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章