CA 周記 - 派福利!通過 Azure 零成本進入 CUDA 編程

我們在配置深度學習環境的時候,除了安裝各種庫和框架外,如果需要 GPU 加速,還需要配置 CUDA 。那 CUDA 是什么 ?它的作用是什么 ?

CUDA 編程介紹

01

什么是 CUDA?

CUDA (Compute Unified Device Architecture) 是通用的并行計算平臺和編程模型,利用 Nvidia GPU 中的并行計算引擎能更有效地解決復雜的問題,如矩陣和線性代數等相關運算。

02

為什么需要 CUDA ?

  • GPU 是為高速并行計算而生的(我們常見的場景應該是游戲)

  • 對于某些應用,通過 GPU 調用比 CPU 調用高 30-100 倍

  • GPU 擁有 ALU (算術邏輯單元), 允許更多的并行計算結合。例如計算屏幕上每個像素的顏色等

CUDA 充分發揮 GPU 的作用 ,使得開發者通過編程釋放 GPU 的并行計算能力。

03

進入 CUDA 編程的所需條件

38a8918180bdd684e78d4c0b80b6fb79.png

CUDA 支持不同的編程語言(如上圖) C / C++ / Python 等,最常用還是通過 CUDA C 進行編寫。CUDA C 是標準 ANSI C 語言的擴展,支持異構編程。

實際上除了編程語言外,你或者更需要的是一塊高性能顯卡。當你缺少鈔票的時候,公有云會是進入 CUDA 編程的最低成本選擇。

Azure 機器學習讓你零成本

入坑 CUDA 編程

Azure 有非常強大的機器學習功能, 我一直喜歡使用 Azure 機器學習來構建我的機器學習或深度學習方案。對于個人開發者和學生黨都可以免費申領 Azure 。

對于個人開發者,你只需要一張信用卡,通過以下地址,就可以申領 Azure 200 美金的免費額度:https://azure.com/free

對于學生黨,你只需要有一個 edu 郵箱 ,通過以下地址,就可以申領 Azure 100 美金的免費額度:https://aka.ms/studentgetazure

這個額度足夠你在 Azure 上使用一個 K80 的計算實例從 0 開始學習 CUDA 編程。(或者有些小伙伴希望 A100 ,但個人覺得 K80 對于初哥已經非常足夠了)。以下是構建方式:

01

在 Azure 門戶上創建?

Azure 機器學習工作區

進入門戶 ,點擊“創建資源”,選擇 AI + 機器學習 , 再選擇 Azure Machine Learning

36790014e098eb4c15d34c4071112d18.png

進入 Azure Machine Learning 后,需要添加 Azure 機器學習工作區所在資源組和相關的名字,這里特別提示, Azure 上只有 West US 2 的區域提供了 GPU 相關的計算實例,所以在選用時,一定要選用 West US 2, 否則你沒法使用 GPU 的計算實例。

c2a755324738fd3def28b795fd5934d0.png

當確認好后,點擊 “審閱和創建”,確認無誤后,再點擊“創建”,稍等片刻就可以順利地完成 Azure 機器學習工作區的創建。

創建完成后,直接進入創建好的 Azure 機器學習工作區。

8f0545c4abd8f947206a1844d1081777.png

點擊工作室 Web URL 進入屬于你的機器學習環境

ea3a427772a19521ac1721b91f4ecdd7.png

02

創建 Azure 機器學習計算實例

Azure 機器學習計算實例是面向數據科學家的基于云的托管式工作站,它針對機器學習場景進行了優化,并結合 JupyterLab, Jupyter Notebook , VS Code 進行項目構建和模型部署。

我們通過左側菜單,點擊管理模塊下的計算,選擇新建,創建一個計算實例

7682ddf024d5e48b68786337b044b735.png

因為涉及到 CUDA 編程,所以必須選擇 GPU

e2f3efaa3f9fd85be454e52c04ee88f1.png

注意:如果你希望獲取更強的 GPU ,可以點擊“從所有選項中選擇”,但你可能需要提交配額申請,該文章提及內容只針對通用的 K80。

8b0b92d2b03112cead2aee47698a3845.png

點擊創建后,稍等片刻,你的計算實例就創建成功了。

03

計算實例上的第一個 CUDA 程序

在創建好的計算實例中選擇終端

88e950278bf51714de6864665d4fb59c.png

你可以通過終端分別輸入一下命令查看相關 cuda 對應信息

nvidia-smi
nvcc -V

1bb43c503fdae687cabbc9bf777c94c0.png

進入后創建一個 code 文件夾, 進入 code 文件夾后,通過 vim 創建一個 helloworld.cu

mkdir?code
cd?code
vim helloworld.cu

在 helloworld.cu 添加如下內容

#include<stdio.h>
#include<stdlib.h> __global__ void print_from_gpu(void) {printf("Hello World! from thread [%d,%d] \From device\n", threadIdx.x,blockIdx.x); 
}int main(void) { printf("Hello World from host!\n"); print_from_gpu<<<1,1>>>();cudaDeviceSynchronize();
return 0; 
}

通過輸入 :wq! 保存該文件

在終端運行以下指令

nvcc?-arch=sm_37?helloworld.cu?-o?helloworld
./helloworld

運行成功,如下圖

f5a78726187bd58c5032aa100557bad4.png

注意:因為 K80 相對比較舊的架構,所以你需要設定好編譯時的對應的相關設定,否則你沒法順利執行 GPU 的相關調用,以下是相關的架構對應圖

a9f709705ce003d11d71b5cb61ddcf7c.png

為 CUDA 編程

添加 Notebook ?持

喜歡使用 Jupyter Notebook 是開發人員的使用習慣, 網上有很多都是針對友商的環境的設定,但這個你需要佛跳墻。所以我做了一下調整,讓他可以在 Azure 機器學習環境中進行,步驟如下,在作者區域選擇 “Notebooks”,創建一個 notebook 文件夾,選擇創建一個新文件。

cd2547f3b95f3124ca71cc3284f06432.png

Azure 計算實例還是很方便的,因為你不需要配置任何東西,就可以把 Nvidia 驅動, CUDA , CUDNN 等東西配置好了。大家終于不用因為環境而從入門到放棄了!

選擇 Kernel 為 Python3.8 - Azure ML

6582fe2700c037706e6c0f3e0e78d53f.png

在新創建的 Notebook 添加一行 Cell, 輸入如下命令

!pip3 install git+https://github.com/kinfey/nvcc4jupyter.git

繼續添加一行 Cell,輸入如下命令

%load_ext azureml_nvcc_plugin

再添加一行 Cell,輸入如下命令

%%cu #include <stdio.h>
__global__ void helloFromHost();
__device__ int helloFromDevice(int tid);
int main()
{helloFromHost<<<1,5>>>();cudaDeviceReset();return 0;
}
__global__ void helloFromHost()
{int tid=threadIdx.x;printf("Hello world From __global__ kernel: %d\n",tid);int tid1=helloFromDevice(tid);printf("tid1 : %d\n",tid1);
}__device__ int helloFromDevice(int tid)
{printf("Hello world Form __device__ kernel: %d\n",tid);return tid+1;
}

然后輸入運行,結果如下 :

5fb2dcfeb4e8a75f7088ab1a97f7d20c.png

這個時候你就可以用 Notebook 去運行 CUDA 程序了。

當然 Azure 機器學習可以支持本地 VS Code 的編寫,你只需要選擇在 VS Code 中編輯,你就可以在本地 VS Code 編寫你的 CUDA 代碼,這樣更方便。

82ca60e4387f9283760264bfcc587348.png

0449aa70f32bdd71fdf78fdf670db369.png

補充:當你不用時 ,切記把計算實例關閉,否則很容易會消耗完,雖然 K80 是 0.9 美元每小時,對于免費額度還是足夠完成所有 CUDA 編程學習,但是也是能省則省。

04a589243abcbc4c79b42f68ea4a0acf.png

后記

通過 Azure 你可以免費搭建一個 GPU 的環境進行 CUDA 學習,太方便了。或者 CUDA 學習還有一段很長的路, 但解決了硬件問題,是各位學生黨和個人開發者的福音啊!還不來嘗試一下?

相關資源

1.個人免費 Azure 申請 https://azure.com/free

2.學生免費 Azure 申請 https://aka.ms/studentgetazure

3.了解Azure 機器學習https://learn.microsoft.com/zh-cn/azure/machine-learning/overview-what-is-azure-machine-learning

4.了解 CUDA 編程 https://docs.nvidia.com/cuda

CA周記往期回顧:

1b9ede327e8641a594e20fe3edddcf20.jpeg

更多原創文章與資源共享

請關注Kinfey Techtalk

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282177.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《視圖更新與關系數據庫理論》——2.1 關系和關系變量

本節書摘來自異步社區出版社《視圖更新與關系數據庫理論》一書中的第2章&#xff0c;第2.1節&#xff0c;作者&#xff1a;【美】C.J. Date&#xff08;達特&#xff09;&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.1 關系和關系變量 每一個關系都有一…

盜取手機敏感信息,Android 6.0之上兼容

盜取手機敏感信息&#xff0c;Android 6.0之上兼容 項目介紹 盜取信息包含&#xff1a; 手機中所有照片手機中所有視頻手機中所有通訊錄手機中所有短信手機中所有通話記錄手機中所有安裝應用兼容Android 6.0及之上版本動態權限申請工具開放效果展示 1.照片信息 MaterialBean{mL…

再記一次Memory Leak分析

性能是優化出來的&#xff0c;不管是在上生產前&#xff0c;還是在上生產后。大部分性能在性能測試階段就能發現問題&#xff0c;但也有一些性能問題&#xff0c;結合生產的環境&#xff0c;生產數據才能表現出來&#xff0c;成為一個顯著的瓶頸。這次是生成pdf造成的內存泄露&…

PHP格式化全國省市區列表

一、代碼部分 /*** 獲取全國省市區列表&#xff08;格式化后&#xff09;*/public function getRegionList(){$data CoreRegion::find()->select([national_code, region_name, parent_id, region_level])->asArray()->all();$data $this->assembleRegionData($…

《C語言開發從入門到精通》一2.4 技術解惑

本節書摘來自異步社區《C語言開發從入門到精通》一書中的第2章&#xff0c;第2.4節&#xff0c;作者王長青 , 韓海玲&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.4 技術解惑 2.4.1 安裝Visual Studio的幾個常見問題 Visual Studio 2010容量巨大&…

POM思想__首頁頁面元素查找、功能點實現進行封裝

一、代碼如下 package www.gui.huohu.pom;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.sele…

061_Apex 異常捕捉

Trigger 中的錯誤處理 在 Trigger 中&#xff0c;我們可以為進行操作的數據進行驗證&#xff0c;類似于驗證規則。如果遇到不符合條件的數據&#xff0c;可以通過 addError() 函數來將錯誤顯示給用戶&#xff0c;并記錄日志。 在如下代碼中&#xff0c;當一個“業務機會”對象被…

從 C# 崩潰異常 中研究 頁堆 布局

一&#xff1a;背景 1.講故事最近遇到一位朋友的程序崩潰&#xff0c;發現崩潰點在富編輯器 msftedit 上&#xff0c;這個不是重點&#xff0c;重點在于發現他已經開啟了 頁堆 &#xff0c;看樣子是做了最后的掙扎。0:000> !analyze -v EXCEPTION_RECORD: (.exr -1) Except…

Win10筆記本不顯示wifi列表

一、問題描述 1、連接有線網絡時&#xff0c;只顯示連接到的有線網絡&#xff0c;而不顯示wifi列表 2、不連接有線網絡時&#xff0c;同樣不顯示wifi列表 二、解決方案 1、Win R 打開運行&#xff0c;并輸入services.msc 2、回車確定&#xff0c;找到WLAN AutoConfig項&…

《游戲大師Chris Crawford談互動敘事》一22.1 互動敘事前途無量

本節書摘來異步社區《游戲大師Chris Crawford談互動敘事》一書中的第22章&#xff0c;第22.1節&#xff0c;作者&#xff1a; 【美】Chris Crawford譯者&#xff1a; 方舟 責編&#xff1a; 陳冀康&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 22.1 互動…

交換兩個局部變量Integer的值

反射是很強大的&#xff0c;誰說的final修飾的就不能改變&#xff0c; 通過反射獲取成員變量&#xff0c;之后可以取消訪問修飾符&#xff0c;也就是說private的也可以訪問&#xff0c; 在修改常量&#xff08;final修飾的&#xff09;&#xff0c;之后就可以對其做任何操作了 …

搭建WeApacheb網站服務器

本地yum源安裝mkdir /opt/dvd (先用mkdir去根下opt目錄下建一個名字叫dvd的目錄)mount /dev/sr0 /opt/dvd (用mount命令&#xff0c;掛載光盤設備&#xff08;/dev/sr0&#xff09;,將光盤掛載到剛剛建立的dvd目錄下&#xff08;/opt/dvd&#xff09;)寫yum源配置文件|-cd…

PHP的構成及生命周期

一、PHP開源源代碼下載地址&#xff1a; https://github.com/php/php-src.git 二、PHP的構成 1、目錄結構 2、目錄分析 &#xff08;1&#xff09;sapi目錄是PHP的應用接口層。 &#xff08;2&#xff09;main為php的主要代碼&#xff0c;主要是輸入/輸出、Web通信、PHP框架…

《Adobe After Effects CS6完全剖析》——動畫:最重要的是關系

本節書摘來自異步社區《Adobe After Effects CS6完全剖析》一書中的第2章&#xff0c;動畫&#xff1a;最重要的是關系&#xff0c;作者 【美】Mark Christiansen&#xff08;馬克克里斯琴森&#xff09;&#xff0c;譯者 苗玉敏&#xff0c;郭圣路&#xff0c;曹玉臣&#xff…

Oracle即將發布的全新Java垃圾收集器 ZGC

Java 11的特性集合已經確定&#xff0c;其中包含了一些非常棒的特性。新版本提供了一個全新的垃圾回收器ZGC&#xff0c;它由甲骨文開發&#xff0c;承諾在TB級別的堆上實現非常低的停頓時間。在本文中&#xff0c;我們將介紹甲骨文開發ZGC的動機、ZGC的技術概覽以及ZGC帶來的一…

如何獲取 OSS AccessKeyId、AccessKeySecret

開通阿里云oss&#xff1a;https://www.aliyun.com/product/oss 1、點擊概覽 — AccessKey 注&#xff1a;官方鏈接 2、出現下圖&#xff0c;選擇“開始使用子用戶Access Key” 3、填寫用戶名&#xff0c;并點擊確定 4、這時會給你的手機發送驗證碼確定是本人操作&#xff0c;…

【網絡爬蟲入門02】HTTP客戶端庫Requests的基本原理與基礎應用

【網絡爬蟲入門02】HTTP客戶端庫Requests的基本原理與基礎應用 廣東職業技術學院 歐浩源 2017-10-15 1、引言 實現網絡爬蟲的第一步就是要建立網絡連接并向服務器或網頁等網絡資源發起請求。urllib是目前最常用的做法&#xff0c;然而Requests會比urlib更加方便&#xff0c;能…

5分鐘內看懂機器學習和深度學習的區別

歡迎大家前往騰訊云社區&#xff0c;獲取更多騰訊海量技術實踐干貨哦~ 本文由liuxuewen 發表于云社區專欄 在本文中&#xff0c;我們將研究深度學習和機器學習之間的差異。我們將逐一了解它們&#xff0c;然后討論他們在各個方面的不同之處。除了深度學習和機器學習的比較外&am…

《零信任的基石:使用 SPIFFE 為基礎設施創建通用身份》翻譯電子書分享

國慶假期除了去浙江和安徽玩了一圈欣賞江南山水和徽派建筑之外&#xff0c;還抽空翻譯了一本電子書。本書譯自 Solving the Bottom Turtle — a SPIFFE Way to Establish Trust in Your Infrastructure via Universal Identity。你可以選擇在線閱讀&#xff08;推薦&#xff09…

《Outlook時間整理術》一創建和使用自己的文件夾結構

本節書摘來異步社區《Outlook時間整理術》一書中的第1章&#xff0c;作者&#xff1a; 【德】Lothar Seiwert , Holger Woeltje 譯者&#xff1a; 歐陽宇&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 創建和使用自己的文件夾結構 花費約兩小時為電子郵件…