在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

使用Apache Spark和NVIDIA GPU加速深度學習

星星科技指導員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-27 09:54 ? 次閱讀

隨著人們對深度學習( deep learning , DL )興趣的日益濃厚,越來越多的用戶在生產環境中使用 DL 。由于 DL 需要強大的計算能力,開發人員正在利用 gpu 來完成他們的訓練和推理工作。

pYYBAGJoomiALHkfAACMGzsbajs051.png

最近,為了更好地統一 Spark 上的 DL 和數據處理,作為 Apache Spark 的一項重大舉措的一部分, GPU 成為 Apache Spark 3.0 中的一種可調度資源。 Spark 將這些資源請求傳遞給底層集群管理器。因為這允許您大規模地運行分布式推理,所以它可以幫助加速大數據管道以利用 DL 應用程序。

在 Apache Spark 3. 0 之前,使用 gpu 是很困難的。您必須手動將 GPU 設備分配給 Spark 作業,并對每個執行器或任務的所有配置進行硬編碼,以便在一臺機器上使用不同的 GPU 。因為 apachehadoop3 。 1yarn 集群管理器允許不同機器之間的 GPU 協調, Apache Spark 現在可以與它一起工作,幫助將設備安排傳遞給不同的任務。提交帶有 GPU 資源配置發現腳本的應用程序后, Spark 將處理任務之間如何共享 GPU 的分配和協調。

在本教程中,我們將演示如何創建 GPU 機器集群,并使用 Apache Spark 和 Amazon EMR 上的 深層 Java 庫( DJL ) 來利用 Scala 中的大規模圖像分類。 DJL 現在提供了一個基于 GPU 的深入學習 Java 包,該包被設計成可以在 Spark 中順利工作。

如果您對 Scala 和 Java 感興趣,或者正在尋找將 Java 中的 DL 集成到大數據管道中的解決方案, DJL 提供了一個可行的解決方案。由于 Python 是 DL 最常用的語言,而 Java 是企業開發人員和數據工程師最流行的語言, DJL 的目標是深入學習, Java 開發人員可以使用熟悉的概念和直觀的 API 訪問的開源工具。 DJL 是建立在現代深度學習框架( TensorFlow 、 PyTorch 、 Apache MXNet 等)之上的。您可以輕松地使用 DJL 來訓練您的模型,或者從各種引擎部署您喜愛的模型,而無需進行任何額外的轉換。

設置 Spark 應用程序

首先,導入 Spark 依賴項。 Spark SQL 和 ML 庫用于存儲和處理映像, Spark 依賴項僅在編譯時使用,并且由于在運行時提供,因此在打包時被排除在外。當所有東西都打包好后,。 jar 任務將它們排除在外。

configurations {
    exclusion
}
dependencies {
    implementation "org.apache.spark:spark-sql_2.12:3.0.1"
    implementation "org.apache.spark:spark-mllib_2.12:3.0.1"
    implementation "org.apache.hadoop:hadoop-hdfs:2.7.4"

    exclusion "org.apache.spark:spark-sql_2.12:3.0.1"
    exclusion "org.apache.spark:spark-mllib_2.12:3.0.1"
    exclusion "org.apache.hadoop:hadoop-hdfs:2.7.4"}
}
jar {
    from {
        (configurations.runtimeClasspath - configurations.exclusion).collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
}

接下來,導入與 DJL 相關的依賴項。您使用 DJL 和 PyTorch 包。它們提供了 DJL 的核心特性,并加載了一個 DL 引擎來運行以進行推斷。此外,您還可以使用 pytorch-native-cu101 在具有 CUDA 10 。 1 的 GPU 上運行。

    implementation platform("ai.djl:bom:0.8.0")
    implementation "ai.djl:api"
    runtimeOnly "ai.djl.pytorch:pytorch-model-zoo"
    runtimeOnly "ai.djl.pytorch:pytorch-native-cu101::linux-x86_64"

加載模型

要在 DJL 中加載模型,請提供承載模型的 URL ( file ://, hdfs ://, s3 ://, https ://)。從該 URL 下載并導入模型。 DJL 還提供了一個強大的動物園模型。 zoo 模型允許您管理預先訓練的模型,并在一行中加載它們。內置的動物園模型目前支持 70 多個預先訓練和準備使用的模型,這些模型來自 GluonCV 、 HuggingFace 、 TorchHub 和 Keras 。

def loadModel(device : Device): ZooModel[Row, Classifications] = {
    val modelUrl = "https://alpha-djl-demos.s3.amazonaws.com/model/djl-blockrunner/pytorch_resnet18.zip?model_name=traced_resnet18"
    val criteria = Criteria.builder
      .setTypes(classOf[Row], classOf[Classifications])
      .optModelUrls(modelUrl)
      .optTranslator(new MyTranslator())
      .optProgress(new ProgressBar)
      .optDevice(device)
      .build()
     ModelZoo.loadModel(criteria)
}

這里的輸入類型是 Spark SQL 中的 Row 。輸出類型是分類結果。 MyTranslator 函數執行預處理和后處理工作。加載的模型是來自 torchvision 的預訓練 PyTorch ResNet18 模型。

主要邏輯

在下面的代碼示例中, downloadImages 函數下載演示圖像并將其存儲在 Hadoop 文件系統( hdfs )。接下來, spark.read.format(“image”) 函數使用 Spark 圖像數據源 將圖像文件從 HDFS 加載到 Spark DataFrame 中。在此步驟之后, mapPartition 獲取 GPU 信息。如代碼示例所示, TaskContext.resources()(“gpu”) 函數存儲為此分區分配的 GPU 。這可確保單個設備上的所有 GPU 都得到正確使用。將模型加載到指定的 GPU 后, predictor.predict(row) 返回 Spark DataFrame 分區中圖像(行)的分類。

def main(args: Array[String]) {

    // download images
    val imagePath = downloadImages(new Path("hdfs:///images"))

    // Spark configuration
    val spark = SparkSession.builder()
      .appName("Image Classification")
      .config(new SparkConf())
      .getOrCreate()
    val df = spark.read.format("image").option("dropInvalid", true).load(imagePath)
    val result = df.select(col("image.*")).mapPartitions(partition => {
      val context = TaskContext.get()
      val gpu = context.resources()("gpu").addresses(0)
      val model = loadModel(Device.gpu(gpu.toInt))
      val predictor = model.newPredictor()
      partition.map(row => {
        predictor.predict(row).toString
      })
    })(Encoders.STRING)
    println(result.collect().mkString("
"))
}

把它包起來

運行 。/gradlew jar 將所有內容捆綁到一個 jar 中,并在 Spark 集群中運行。

使用多個 GPU 設置 Spark 群集

由于 Amazon emr6 。 2 。 0 的發布, Spark 3 。 0 在所有 GPU 實例中都可用。

要設置 Spark 群集,請使用 AWS CLI 創建一個包含三個實例的 GPU 群集。要成功運行該命令,必須將 myKey 更改為 EC2 密鑰名稱。如果預先配置了 --region 選項,也可以將其刪除。

aws emr create-cluster \
    --name "Spark cluster" \
    --release-label emr-6.2.0 \
    --region us-east-1 \
    --ebs-root-volume-size 50 \
    --applications Name=Hadoop Name=Spark \
    --ec2-attributes KeyName=myKey \
    --instance-type g3s.xlarge \
    --instance-count 3 \
    --use-default-roles \
    --configurations https://raw.githubusercontent.com/aws-samples/djl-demo/master/aws/emr-distributed-inference/image-classification-gpu/configurations.json 

您可以從 AWS 中提供的各種 GPU 實例中進行選擇。此示例使用 g3s.xlarge 實例類型進行測試目的群集設置的總運行時間約為 10 – 15 分鐘。

執行 Spark 作業

您可以在 EMR 控制臺上或從命令行運行此駐車作業。

下面的命令告訴 Spark 運行一個 Yarn 集群,并設置一個腳本來查找不同設備上的 gpu 。每個任務的 GPU 數量設置為 0 。 5 ,這意味著兩個任務共享一個 GPU 。您可能還需要相應地設置 CPU 編號,以確保它們匹配。例如,如果您有一個 8 核 CPU ,并且將 spark.task.cpus 設置為 2 ,這意味著四個任務可以在一臺機器上并行運行。要獲得最佳性能,請將 spark.task.resource.gpu.amount 設置為 0 。 25 。這允許四個任務共享同一個 GPU 。這有助于最大限度地提高性能,因為 GPU 和 CPU 中的所有核心都已使用。如果沒有平衡的設置,一些內核處于空閑狀態,這會浪費資源。

spark-submit \
    --master yarn \
    --conf spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh \
    --conf spark.worker.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh \
    --conf spark.task.resource.gpu.amount="0.5" \
    --conf spark.task.cpus=2 \
    --conf spark.executor.resource.gpu.amount=1 \
    --conf spark.worker.resource.gpu.amount=1 \
    --class com.examples.ImageClassificationExample \
    build/libs/image-classification-gpu-1.0-SNAPSHOT.jar

這個腳本大約需要 4-6 分鐘才能完成,您將得到一個打印輸出的推斷結果作為輸出。

摘要

在本教程中,您從頭開始構建包,并將工作提交到 GPU 集群以執行推理任務。嘗試對自己的應用程序使用相同的設置。

關于作者

Qing Lan 是 AWS 深度學習工具包團隊的 SDE 。他是 DJL 的合著者之一 (djl 。 ai 公司 ) 以及 apachemxnet 的 PPMC 成員。 2017 年畢業于哥倫比亞大學,獲計算機工程碩士學位, 2017 年暑期實習。他專注于分布式深度學習訓練和推理領域。

Kong Zhao 是 NVIDIA 的主要解決方案架構師。他提供技術思想領導和架構指導。他為 NVIDIA 和 AWS 客戶進行 PoC ,通過在云中開發、優化和部署 GPU 加速解決方案來滿足他們的 AI 和 HPC 需求。他關注的核心領域是 GPU 相關的云架構、 HPC 、機器學習和分析。此前, Kong 曾擔任 AWS 的高級解決方案架構師、云交換的 atEquinix 架構師以及 Cisco 的產品經理。

Carol McDonald 是一位產品營銷經理,專注于 Spark 和數據科學。 Carol 在很多方面都有經驗,包括技術營銷、軟件架構和開發、培訓、技術宣傳和開發人員外展。 Carol 編寫行業架構、最佳實踐、模式、原型、教程、演示、博客文章、白皮書和電子書。她走遍世界各地,做演講和動手實驗;在銀行、醫療保險和電信行業開發了復雜的、關鍵任務的應用程序。卡羅爾擁有田納西大學計算機科學碩士學位和范德比爾特大學地質學學士學位。卡羅爾精通英語、法語和德語。

審核編輯:郭婷

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

    關注

    19

    文章

    2967

    瀏覽量

    104759
  • API
    API
    +關注

    關注

    2

    文章

    1501

    瀏覽量

    62027
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84692
收藏 人收藏

    評論

    相關推薦

    《CST Studio Suite 2024 GPU加速計算指南》

    的各個方面,包括硬件支持、操作系統支持、許可證、GPU計算的啟用、NVIDIA和AMD GPU的詳細信息以及相關的使用指南和故障排除等內容。 1. 硬件支持 - NVIDIA
    發表于 12-16 14:25

    深度學習工作負載中GPU與LPU的主要差異

    ,一個新的競爭力量——LPU(Language Processing Unit,語言處理單元)已悄然登場,LPU專注于解決自然語言處理(NLP)任務中的順序性問題,是構建AI應用不可或缺的一環。 本文旨在探討深度學習工作負載中GPU
    的頭像 發表于 12-09 11:01 ?300次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>學習</b>工作負載中<b class='flag-5'>GPU</b>與LPU的主要差異

    GPU深度學習中的應用 GPUs在圖形設計中的作用

    隨著人工智能技術的飛速發展,深度學習作為其核心部分,已經成為推動技術進步的重要力量。GPU(圖形處理單元)在深度學習中扮演著至關重要的角色,
    的頭像 發表于 11-19 10:55 ?511次閱讀

    NPU在深度學習中的應用

    設計的硬件加速器,它在深度學習中的應用日益廣泛。 1. NPU的基本概念 NPU是一種專門針對深度學習算法優化的處理器,它與傳統的CPU和
    的頭像 發表于 11-14 15:17 ?582次閱讀

    PyTorch GPU 加速訓練模型方法

    深度學習領域,GPU加速訓練模型已經成為提高訓練效率和縮短訓練時間的重要手段。PyTorch作為一個流行的深度
    的頭像 發表于 11-05 17:43 ?560次閱讀

    GPU深度學習應用案例

    GPU深度學習中的應用廣泛且重要,以下是一些GPU深度學習應用案例: 一、圖像識別 圖像識別是
    的頭像 發表于 10-27 11:13 ?398次閱讀

    GPU加速計算平臺是什么

    GPU加速計算平臺,簡而言之,是利用圖形處理器(GPU)的強大并行計算能力來加速科學計算、數據分析、機器學習等復雜計算任務的軟硬件結合系統。
    的頭像 發表于 10-25 09:23 ?251次閱讀

    FPGA加速深度學習模型的案例

    FPGA(現場可編程門陣列)加速深度學習模型是當前硬件加速領域的一個熱門研究方向。以下是一些FPGA加速
    的頭像 發表于 10-25 09:22 ?229次閱讀

    深度學習GPU加速效果如何

    圖形處理器(GPU)憑借其強大的并行計算能力,成為加速深度學習任務的理想選擇。
    的頭像 發表于 10-17 10:07 ?199次閱讀

    Spark基于DPU的Native引擎算子卸載方案

    1.背景介紹 Apache Spark(以下簡稱Spark)是一個開源的分布式計算框架,由UC Berkeley AMP Lab開發,可用于批處理、交互式查詢(Spark SQL)、實
    的頭像 發表于 06-28 17:12 ?587次閱讀
    <b class='flag-5'>Spark</b>基于DPU的Native引擎算子卸載方案

    新手小白怎么學GPU云服務器跑深度學習?

    新手小白想用GPU云服務器跑深度學習應該怎么做? 用個人主機通常pytorch可以跑但是LexNet,AlexNet可能就直接就跑不動,如何實現更經濟便捷的實現GPU云服務器
    發表于 06-11 17:09

    Spark基于DPU Snappy壓縮算法的異構加速方案

    一、總體介紹 1.1 背景介紹 Apache Spark是專為大規模數據計算而設計的快速通用的計算引擎,是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些不同之處使
    的頭像 發表于 03-26 17:06 ?805次閱讀
    <b class='flag-5'>Spark</b>基于DPU Snappy壓縮算法的異構<b class='flag-5'>加速</b>方案

    RDMA技術在Apache Spark中的應用

    背景介紹 在當今數據驅動的時代,Apache?Spark已經成為了處理大規模數據集的首選框架。作為一個開源的分布式計算系統,Spark因其高效的大數據處理能力而在各行各業中廣受歡迎。無論是金融服務
    的頭像 發表于 03-25 18:13 ?1542次閱讀
    RDMA技術在<b class='flag-5'>Apache</b> <b class='flag-5'>Spark</b>中的應用

    基于DPU和HADOS-RACE加速Spark 3.x

    背景簡介 Apache Spark(下文簡稱Spark)是一種開源集群計算引擎,支持批/流計算、SQL分析、機器學習、圖計算等計算范式,以其強大的容錯能力、可擴展性、函數式API、多語
    的頭像 發表于 03-25 18:12 ?1359次閱讀
    基于DPU和HADOS-RACE<b class='flag-5'>加速</b><b class='flag-5'>Spark</b> 3.x

    FPGA在深度學習應用中或將取代GPU

    現場可編程門陣列 (FPGA) 解決了 GPU 在運行深度學習模型時面臨的許多問題 在過去的十年里,人工智能的再一次興起使顯卡行業受益匪淺。英偉達 (Nvidia) 和 AMD 等公
    發表于 03-21 15:19
    主站蜘蛛池模板: 在线观看视频一区二区三区| 女同性进行性行为视频| 久久精品国产精品亚洲人人| 天堂网| 激情五月婷婷综合| 日本黄黄| 欧美另类亚洲一区二区| 日韩精品视频免费在线观看| a亚洲天堂| 亚洲色网址| 午夜性福利| freesexvideo性欧美tv| 色135综合网| 手机在线黄色网址| 一级特黄特色的免费大片视频| 欧美性满足hd1819| 四虎影视永久在线观看| a网在线| 亚洲一区二区在线免费观看| 日本免费黄色小视频| 天天操天天艹| aaaa黄色片| 国产精品久久婷婷六月丁香| aa国产| 日韩欧美色图| 色婷婷狠狠干| 亚洲色图图片| aaaaaa级特色特黄的毛片| 一区二区免费| 久久频这里精品99香蕉久网址| 免费高清在线观看a网站| 影院成人区精品一区二区婷婷丽春院影视 | 综合五月激情| 色婷婷综合久久久中文字幕| 天天做天天爱天天爽综合网| 国产三级久久久精品三级| 国产一级淫| 在线观看视频一区二区| 久久精品高清| 黄视频免费在线观看| 女色专区|