精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Spark 3.4用于分布式模型訓練和大規模模型推理

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

Apache Spark是一個業界領先的平臺,用于大規模數據的分布式提取、轉換和加載( ETL )工作負載。隨著深度學習( DL )的發展,許多 Spark 從業者試圖將 DL 模型添加到他們的數據處理管道中,以涵蓋各種用例,如銷售預測、內容推薦、情緒分析和欺詐檢測

然而,結合 DL 培訓和推理,從歷史上看,大規模數據一直是 Spark 用戶面臨的挑戰。大多數 DL 框架都是為單節點環境設計的,它們的分布式訓練和推理 API 通常是經過深思熟慮后添加的。

為了解決單節點 DL 環境和大規模分布式環境之間的脫節,有多種第三方解決方案,如 Horovod-on-Spark、TensorFlowOnSpark 和 SparkTorch,但由于這些解決方案不是在 Spark 中本地構建的,因此用戶必須根據自己的需求評估每個平臺。

隨著 Spark 3.4 的發布,用戶現在可以訪問內置的 API,用于分布式模型訓練和大規模模型推理,如下所述。

分布式培訓

對于分布式培訓,有一個新的 TorchDistributor PyTorch 的 API,它遵循 spark-tensorflow-distributorTensorFlow 的 API。這些 API 通過利用 Spark 的屏障執行模式,在 Spark executors 上生成分布式 DL 集群節點,從而簡化了將分布式 DL 模型訓練代碼遷移到 Spark 的過程。

一旦 Spark 啟動了 DL 集群,控制權就基本上通過main_fn傳遞給TorchDistributorAPI

如下面的代碼所示,使用這個新的 API 在 Spark 上運行標準的分布式 DL 培訓只需要進行最小的代碼更改。

from pyspark.ml.torch.distributor import TorchDistributor

def main_fn(checkpoint_dir):
    # standard distributed PyTorch code
    ...

# Set num_processes = NUM_WORKERS * NUM_GPUS_PER_WORKER
output_dist = TorchDistributor(num_processes=2, local_mode=False, use_gpu=True).run(main_fn, checkpoint_dir)

一旦啟動,運行在執行器上的流程就依賴于其各自 DL 框架的內置分布式訓練 API 。將現有的分布式訓練代碼移植到 Spark 應該很少或不需要修改。然后,這些進程可以在訓練期間相互通信,還可以直接訪問與 Spark 集群相關的分布式文件系統(圖 1 )。

distributed-training-torchdistributor-api-diagram.png 圖 1 。分布式培訓使用TorchDistributorAPI

然而,這種遷移的方便性也意味著這些 API 不使用 Spark RDD 或 DataFrames 進行數據傳輸。雖然這消除了在 Spark 和 DL 框架之間轉換或序列化數據的任何需要,但它也要求在啟動訓練作業之前完成任何 Spark 預處理并持久化到存儲中。主要訓練功能可能還需要適于從分布式文件系統而不是本地存儲讀取。

分布式推理

對于分布式推理,有一個新的predict_batch_udfAPI ,它建立在Spark Pandas UDF以便為 DL 模型推斷提供更簡單的接口。 pandas 與基于行的 UDF 相比, UDF 提供了一些優勢,包括通過Apache Arrow以及通過Pandas。有關詳細信息,請參閱Introducing Pandas UDF for PySpark.

然而,盡管 pandas UDF API 可能是 ETL 用例的一個很好的解決方案,但它仍然不適合 DL 推理用例。首先, pandas UDF API 將數據表示為 pandas 系列或數據幀,這同樣適用于執行 ETL 操作,如選擇、排序、數學轉換和聚合

然而,大多數 DL 框架都期望NumPy數組或標準 Python 數組作為輸入,這些數組通常由自定義張量變量包裝。因此,pandas UDF 實現至少需要將傳入的 pandas 數據轉換為 NumPy 數組。不過,根據用例和數據集的不同,準確的轉換可能會有很大的差異。

其次, pandas UDF API 通常在數據分區上運行,數據分區的大小由數據集的原始寫入者或分布式文件系統決定。因此,很難對傳入的數據進行適當的批處理以進行優化計算。

最后,仍然存在在 Spark 執行器和任務之間加載 DL 模型的問題。在正常的 Spark ETL 工作中,工作負載遵循函數編程范式,其中可以對數據應用無狀態函數。然而,對于 DL 推理,預測函數通常需要從磁盤加載其 DL 模型權重。

Spark 具有通過任務序列化和廣播變量將變量從驅動程序序列化到執行器的能力。然而,這兩者都依賴于 Python pickle 序列化,這可能不適用于所有 DL 模型。此外,如果操作不當,加載和序列化非常大的模型可能會帶來極高的性能成本。

解決當前限制

為了解決這些問題predict_batch_udf引入了以下方面的標準化代碼:

將 Spark 數據幀轉換為 NumPy 數組,因此最終用戶 DL 推理代碼不需要從 pandas 數據幀進行轉換。

為 DL 框架批處理傳入的 NumPy 數組。

在執行器上加載模型,避免了任何模型序列化問題,同時利用 Sparkspark.python.worker.reuse配置以在 Spark 執行器中緩存模型。

下面的代碼演示了這個新的 API 如何隱藏將 DL 推理代碼轉換為 Spark 的復雜性。用戶只需定義make_predict_fn函數,使用標準的 DL API 加載模型并返回predict作用然后predict_batch_udf函數生成一個標準PandasUDF,負責處理幕后的其他一切。

from pyspark.ml.functions import predict_batch_udf

def make_predict_fn():
    # load model from checkpoint
    import torch    
    device = torch.device("cuda")
    model = Net().to(device)
    checkpoint = load_checkpoint(checkpoint_dir)
    model.load_state_dict(checkpoint['model'])

    # define predict function in terms of numpy arrays
    def predict(inputs: np.ndarray) -> np.ndarray:
        torch_inputs = torch.from_numpy(inputs).to(device)
        outputs = model(torch_inputs)
        return outputs.cpu().detach().numpy()
    
    return predict

# create standard PandasUDF from predict function
mnist = predict_batch_udf(make_predict_fn,
                          input_tensor_shapes=[[1,28,28]],
                          return_type=ArrayType(FloatType()),
                          batch_size=1000)

df = spark.read.parquet("/path/to/test/data")
preds = df.withColumn("preds", mnist('data')).collect()

請注意,此 API 使用標準 Spark DataFrame 進行推斷,因此執行器將從分布式文件系統讀取數據并將該數據傳遞給predict函數(圖 2 )。這也意味著,根據需要,數據的任何處理都可以與模型預測一起進行。

還要注意,這是一個data-parallel體系結構,其中每個執行器加載模型并對數據集的各自部分進行預測,因此模型必須適合執行器內存。

distributed-inference-predict_batch_udf-api-diagram.png 圖 2 :分布式推理使用predict_batch_udfAPI

Spark 深度學習的端到端示例

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    4940

    瀏覽量

    102818
  • 人工智能
    +關注

    關注

    1791

    文章

    46872

    瀏覽量

    237593
  • 深度學習
    +關注

    關注

    73

    文章

    5493

    瀏覽量

    120979
收藏 人收藏

    評論

    相關推薦

    名單公布!【書籍評測活動NO.30】大規模語言模型:從理論到實踐

    。 為了使更多的自然語言處理研究人員和對大語言模型感興趣的讀者能夠快速了解大模型的理論基礎,并開展大模型實踐,復旦大學張奇教授團隊結合他們在自然語言處理領域的研究經驗,以及分布式系統和
    發表于 03-11 15:16

    【大語言模型:原理與工程實踐】揭開大語言模型的面紗

    文本生成,根據提示或上下文生成連貫、富有創造性的文本,為故事創作等提供無限可能。大語言模型也面臨挑戰。一方面,其計算資源需求巨大,訓練推理耗時;另一方面,模型高度依賴數據,需要
    發表于 05-04 23:55

    【大語言模型:原理與工程實踐】大語言模型的基礎技術

    概率推斷,利用共現矩陣學習每個詞的主題分布,進而將其作為詞的表示向量。在大規模語料庫中進行模型訓練,使語義相似的詞具有相似的主題分布。然而,
    發表于 05-05 12:17

    分布式對象調試中的事件模型

    針對事件的分布式程序調試過程中,需處理大量的事件消息,如果處理不當,則會影響分布式程序的執行,提出了一種分布式對象中的事件模型,采用這種模型
    發表于 12-10 17:29 ?8次下載

    基于代理模型分布式聚類算法

    II DDM模型是現有的分布式聚類模型中性能較好的一種個體合作以及串行工作方式固有的不足,在該模型基礎上引入分層的思想,提出了一種新的分布式
    發表于 09-16 14:08 ?0次下載
    基于代理<b class='flag-5'>模型</b>的<b class='flag-5'>分布式</b>聚類算法

    大規模分布式機器學習系統分析

    ,通過對比三款開源分布式LDA系統-Spark LDA、PLDA+和LightLDA,在系統資源消耗、算法收斂性能和可擴展性等方面的表現,分析各系統在設計、實現和性能上的差異。實驗結果表明:面對小規模的樣本集和
    發表于 12-05 19:02 ?0次下載
    <b class='flag-5'>大規模</b><b class='flag-5'>分布式</b>機器學習系統分析

    實現 TensorFlow 架構的規模性和靈活性

    TensorFlow 是為了大規模分布式訓練推理而設計的,不過它在支持新機器學習模型和系統級優化的實驗中的表現也足夠靈活。
    的頭像 發表于 01-26 14:48 ?2784次閱讀
    實現 TensorFlow 架構的<b class='flag-5'>規模</b>性和靈活性

    如何向大規模訓練語言模型中融入知識?

    本文關注于向大規模訓練語言模型(如RoBERTa、BERT等)中融入知識。
    的頭像 發表于 06-23 15:07 ?4183次閱讀
    如何向<b class='flag-5'>大規模</b>預<b class='flag-5'>訓練</b>語言<b class='flag-5'>模型</b>中融入知識?

    Google Brain和DeepMind聯手發布可以分布式訓練模型的框架

    。 正如吳恩達所言,當代機器學習算法的成功很大程度上是由于模型和數據集大小的增加,在大規模數據下進行分布式訓練也逐漸變得普遍,而如何在大規模
    的頭像 發表于 06-26 15:42 ?2213次閱讀
    Google Brain和DeepMind聯手發布可以<b class='flag-5'>分布式</b><b class='flag-5'>訓練</b><b class='flag-5'>模型</b>的框架

    如何使用TensorFlow進行大規模分布式的QML模擬

    中,我們將逐步帶您了解如何使用 TensorFlow 和 TensorFlow Quantum 進行大規模分布式
    的頭像 發表于 08-10 17:31 ?2596次閱讀

    超大Transformer語言模型分布式訓練框架

    NVIDIA Megatron 是一個基于 PyTorch 的框架,用于訓練基于 Transformer 架構的巨型語言模型。本系列文章將詳細介紹Megatron的設計和實踐,探索這一框架如何助力
    的頭像 發表于 10-11 16:46 ?2647次閱讀
    超大Transformer語言<b class='flag-5'>模型</b>的<b class='flag-5'>分布式</b><b class='flag-5'>訓練</b>框架

    探究超大Transformer語言模型分布式訓練框架

    。 優化的分布式集群架構:NVIDIA DGX SuperPOD 有了高效的分布式訓練框架,自然也需要優化的分布式訓練集群。 NVIDIA
    的頭像 發表于 10-20 09:25 ?2408次閱讀

    DGX SuperPOD助力助力織女模型的高效訓練

      “強悍的織女模型在京東探索研究院建設的全國首個基于 DGX SuperPOD 架構的超大規模計算集群 “天琴α” 上完成訓練,該集群具有全球領先的大規模
    的頭像 發表于 04-13 15:13 ?1004次閱讀

    使用NVIDIA DGX SuperPOD訓練SOTA大規模視覺模型

    在這篇文章中,我們展示了在大規模人工智能超級計算機上訓練 SOTA 大規模視覺 transformer 模型(如 VOLO \ u D5 )的主要技術和程序,如基于 NVIDIA DG
    的頭像 發表于 05-30 10:17 ?2355次閱讀
    使用NVIDIA DGX SuperPOD<b class='flag-5'>訓練</b>SOTA<b class='flag-5'>大規模</b>視覺<b class='flag-5'>模型</b>

    基于PyTorch的模型并行分布式訓練Megatron解析

    NVIDIA Megatron 是一個基于 PyTorch 的分布式訓練框架,用來訓練超大Transformer語言模型,其通過綜合應用了數據并行,Tensor并行和Pipeline并
    的頭像 發表于 10-23 11:01 ?2788次閱讀
    基于PyTorch的<b class='flag-5'>模型</b>并行<b class='flag-5'>分布式</b><b class='flag-5'>訓練</b>Megatron解析