本文將向您展示如何在 OCI Ampere A1 上準備和啟動計算密集的 AI 應用程序。
使用 Ampere A1,我們將發揮 Ampere Altra 處理器和 Ampere AIO 一流的 AI 推理性能。
我將使用此 Github 中的演練/腳本(請注意,這些腳本也將在我們將創建的實例上)。此外,如果您想繼續,您需要 Ampere A1 實例 - 可以在 OCI 上免費創建。
創建免費的 Ampere VM
首先,我將創建 Ampere A1 的單個實例。該實例使用 VM.Standard.A 1.Flex 并具有 4 個 OCPU 和 24 GB 內存。
“根據 Oracle 的定價頁,Oracle CPU (OCPU) 計費單元實際上是處理器的一個物理內核。一個開啟超線程的 CPU,對應的是兩個硬件執行線程,即所謂的 vCPU。而對于 A1 實例,一個 OCPU 就是一個 vCPU。”
打開導航菜單并選擇計算和實例以創建計算實例,您可以選擇 Running Hugo 文章中使用的相同的隔層或在實例頁面上創建新隔層。
單擊創建實例按鈕打開創建頁面,創建新實例。創建頁面上有多個部分。但是,我們只會更改其中的幾個。
首先,您可以將隨機生成的名稱更改為更易于使用的名稱,例如 ai- vm。以下內容是 Placement——我們可以在此處保留默認值,但您可以為實例選擇不同的可用性域(AD) 和故障域(FD)。最后,將默認設置 Always Free-eligible 可用性域。
選擇圖像和形狀
下一部分稱為 Image and Shape(圖像和形狀),我們將在這里選擇實例形態(實例形態是 GCP 中的機器類型和 Azure 中的 VM 大小)和計算實例的操作系統映像。
1
單擊 Change shape 按鈕以選擇不同的 VM 實例形態,確保您已選擇虛擬機的實例類型。您可以在下一行中選擇形態系列。我們正在尋找包含基于 ARM 的處理器和名為 VM.Standard.A 1.Flex 的形態名稱的 Ampere 系列(它應該是此視圖中唯一可用的形狀)
2
選擇 VM.Standard.A 1.Flex ,將 OCPU 數量調整為 4,并將內存量調整為 24 GB。完成此項操作后,我們將能夠永久免費使用這一規格。
3
單擊 Select shape 按鈕以確認選擇。
4
單擊 Change image 按鈕。然后讓我們為形狀獲取正確的鏡像。
選擇鏡像
5
在下拉菜單中選擇 Partner Image 。然后在搜索框中,輸入 Ampere 。您將看到可用于 Ampere A1 形狀的可用鏡像。
Ampere Tensorflow 鏡像
6
選中Tensorflow 2.7 – Ampere AI Optimizer – Ubuntu 20.04 框和以下復選框以同意“Terms of Use(使用條款)”。然后,單擊 Select Image 按鈕。您應該會看到選定的 shape 和 image 框,如下圖所示。
Tensorflow 2.7 – Ampere AI Optimizer – 已選擇 Ubuntu 20.04 鏡像
添加 SSH 密鑰
我們還想稍后使用 SSH 密鑰連接到實例。您可以選擇創建新的 SSH 密鑰對或上傳/粘貼一個或多個現有公鑰文件。
如果您正在生成新的 SSH 密鑰對,請確保單擊 Save Private Key 按鈕以保存生成的密鑰。
“注意:您必須將 SSH 密鑰文件的權限設置為 400。您可以運行 chmod 400 < keyfile > 來執行此操作。”
創建 AI 實例
我們不會更改任何其他設置,因此讓我們單擊 Create 按鈕來創建實例。
創建 AI 實例
幾分鐘后,OCI 會創建實例,并且實例的狀態會從配置變為運行。
連接到實例
要連接到實例,我們將使用實例的公共 IP 地址和我們設置的 SSH 密鑰。
您可以從實例頁面獲取公共 IP 地址,然后使用 ubuntu 用戶名通過 SSH 連接到機器。
$ ssh -i ubuntu@
AI虛擬機登錄畫面
請注意,您可能會看到重新啟動 VM 的消息 - 為此,只需運行 sudo reboot 并在一分鐘后再次登錄。
運行 TensorFlow-AIO示例
TensorFlow 是一個用于機器學習的開源平臺。它擁有一系列工具、庫和資源,可讓您輕松構建和部署基于 ML 的應用程序。
我們在創建實例時選擇的 TensorFlow 鏡像包含簡單的 TensorFlow 示例。為了準備運行示例,讓我們先下載模型:
$ cd ~/aio-examples
$ ./download_models.sh
“請注意,將所有模型下載到 VM 需要幾分鐘時間。”
模型文件被下載到 ~/ aioi -examples 和多個文件夾(例如classifications、 object_detection)。這些模型用來執行一些常用的 AI 推理計算機視覺任務,如圖像分類和對象檢測。
讓我們從一個使用 Tensorflow resnet_50_v15 模型進行分類的示例開始:
“resnet50 模型是什么?這是一個流行的模型,是 MLCommon 基準組件之一。您可以在這里讀更多關于它的內容 ”
cd classifications/resnet_50_v15
“對于 Ampere A1 實例,一個 OCPU 對應一個物理的 Ampere Altra處理核心。它不同于 AMD (E3/E4)或 Intel Standard3(S3)中,一個 OCPU 對應一個超線程(HT)內核(一個物理內核對應兩個 HT 內核)。”
我們使用4個 Altra 內核來運行這個示例。同時選擇 FP32(全精度浮點)模型來運行此示例:
export AIO_NUM_THREADS=4
python run.py -m resnet_50_v15_tf_fp32.pb -p fp32
“在內存中,FP32 或全精度浮點是一種 32 位的數字格式。”
可以看到,使用四個核心,resnet_50_v15 每秒可以處理 19.23 張圖像(ips)。
AIO 運行半精度 (FP16) 模型
Ampere A1 在硬件中提供對 FP16 計算的原生支持。半精度(FP16)模型可提供比 FP32 多 2 倍的額外性能,同時也不會影響模型的精確度。AMD E4 和 Intel S3 都沒有對 FP16 提供原生支持,因此運行 FP16 會異常緩慢。
“FP16 是一種半精度浮點計算機數字格式,在內存中占用 16 位。”
讓我們嘗試在 Ampere A1 上運行 FP16:
python run.py -m resnet_50_v15_tf_fp16.pb -p fp16
ubuntu@ai-vm:~/aio-examples/classification/resnet_50_v15$ python run.py -m resnet_50_v15_tf_fp16.pb -p fp16
/usr/lib/python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (3.0.4) doesn't match a supported version!
warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported "
Running with 4 threads
Top-1 accuracy = 0.800
Top-5 accuracy = 1.000
Accuracy figures above calculated on the basis of 5 images.
Latency: 28 ms
Throughput: 36.29 ips
使用 FP16 時,我們每秒可以處理 36.29 張圖像。
將數字與 AMD 和 Intel 實例(4 個 vCPU)進行比較
我們可以通過在 AMD 和 Intel Flex 形狀上運行相同的腳本來比較這些數字。運行此模型和應用程序每秒的形狀和圖像的成本如下表所示。
對于 FP32 resnet_50_v15 模型:
對于 FP16 resnet_50_v15 模型:
在相同的成本下,運行 resnet_50_v15 FP32 模型的 Ampere A1 形狀可提供超過 AMD 最佳 E4 實例 1.5 倍的性能,以及超過英特爾Standard3實例 2 倍的性能。
利用 Ampere Altra 對 FP16 的原生支持,在相同的成本下,Ampere A1 形狀達到的性能超過AMD E4 的 2.8 倍和Intel Standard3的 3.8 倍!
此外,Ampere A1形狀的性能比 AMD/Intel 更好。例如,如果使用更高核心數的 VM,與運行 FP32 模型的 E4 相比,Ampere A1 可提供額外 2 倍的性能增益。
Jupyter Notebook 的可視化示例
首先,讓我們在 VM 上啟動 Jupyter Notebook 服務器。
Jupyter Notebook 通常用于在瀏覽器上輕松實現編輯、調試和可視化 Python 應用程序的需求。我們使用的 VM 圖像包括一個Jupyter Notebook 示例。
cd ~/.aio-examples./start_notebook.sh
buntu@ai-vm:~/aio-examples$ ./start_notebook.shOn your local system please open a new terminal window and run:ssh -N -L 8080:localhost:8080 -i ./your_key.key your_user@xxx.xxx.xxx.xxx
After that open one of the links printed out below in your local browser
[I 23:08:01.841 NotebookApp] Writing notebook server cookie secret to /home/ubuntu/.local/share/jupyter/runtime/notebook_cookie_secret[I 23:08:02.270 NotebookApp] Serving notebooks from local directory: /home/ubuntu/aio-examples
[I 23:08:02.270 NotebookApp] Jupyter Notebook 6.4.8 is running at:
[I 23:08:02.270 NotebookApp] http://localhost:8080/?token=fd98a68431793485bb9dbf8590ad6f571dbabbfa96757b37
[I 23:08:02.270 NotebookApp] or http://127.0.0.1:8080/?token=fd98a68431793485bb9dbf8590ad6f571dbabbfa96757b37
[I 23:08:02.270 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 23:08:02.274 NotebookApp]
To access the notebook, open this file in a browser: file:///home/ubuntu/.local/share/jupyter/runtime/nbserver-1367-open.html
Or copy and paste one of these URLs: http://localhost:8080/?token=fd98a68431793485bb9dbf8590ad6f571dbabbfa96757b37 or http://127.0.0.1:8080/?token=fd98a68431793485bb9dbf8590ad6f571dbabbfa96757b37
接下來,我們將通過本地主機打開一個用于瀏覽器連接的通道。在第二個終端窗口中,運行以下命令:
ssh -N -L 8080:localhost:8080 -i ./your_key.key your_user@xxx.xxx.xxx.xxx
然后,使用上一步中的鏈接在瀏覽器中打開Jupyter Notebook(例如
http://localhost:8080/?token=....)。
您會看到如下圖所示的頁面。
連接到Ampere 上的Jupyter服務器
我們將使用 object_detection 文件夾中的對象檢測示例。雙擊文件夾的名稱,然后單擊 examples.ipynb 項目。
單擊“運行”按鈕來逐步執行該示例。您會看到對象檢測的結果以及 AIO 對 Tensorflow 的加速情況。
您會注意到啟用或禁用 AIO 時的延遲差異。例如,當以 FP16 精度運行已啟用 AIO 的模型時,延遲約為 44 毫秒。在禁用 AIO 的情況下運行相同的模型,延遲為 3533 ms!這是一個明顯的區別。
運行示例
您也可以用相同的方式運行分類示例——單擊 classification文件夾,然后單擊 examples.ipynb 項目。
分類示例
結論
恭喜!您已完成在 Ampere A1 形狀上運行通用 AI 應用程序的全過程。
運行這些示例相當簡單——不用進行任何轉換或更改應用程序代碼就能在 Ampere A1 上運行 API 應用程序。
像 TensorFlow 等的標準框架會自動加速。我們可以很輕松地以相同的成本達到比其他形狀高 2 到 4 倍的性能增益。
您可以在 Github repo 中查看本文中使用的腳本——這些腳本與我們在所使用的示例圖像上自動下載的腳本相同。
-
AI
+關注
關注
87文章
28877瀏覽量
266239 -
應用程序
+關注
關注
37文章
3198瀏覽量
57363 -
虛擬機
+關注
關注
1文章
888瀏覽量
27813
發布評論請先 登錄
相關推薦
評論