咱们在配置深度学习环境的时候,除了装置各种库和框架外,如果须要 GPU 减速,还须要配置 CUDA。那 CUDA 是什么?它的作用是什么?
CUDA 编程介绍
什么是 CUDA?
CUDA (Compute Unified Device Architecture) 是通用的并行计算平台和编程模型,利用 Nvidia GPU 中的并行计算引擎能更无效地解决简单的问题,如矩阵和线性代数等相干运算。
为什么须要 CUDA?
- GPU 是为高速并行计算而生的 (咱们常见的场景应该是游戏)
- 对于某些利用,通过 GPU 调用比 CPU 调用高 30-100 倍
- GPU 领有 ALU (算术逻辑单元),容许更多的并行计算联合。例如计算屏幕上每个像素的色彩等
CUDA 充分发挥 GPU 的作用,使得开发者通过编程开释 GPU 的并行计算能力。
进入 CUDA 编程的所需条件
CUDA 反对不同的编程语言(如上图)C / C++ / Python 等,最罕用还是通过 CUDA C 进行编写。CUDA C 是规范 ANSI C 语言的扩大,反对异构编程。
实际上除了编程语言外,你或者更须要的是一块高性能显卡。当你短少钞票的时候,私有云会是进入 CUDA 编程的最低老本抉择。
Azure 机器学习让你零老本入坑 CUDA 编程
Azure 有十分弱小的机器学习性能,我始终喜爱应用 Azure 机器学习来构建我的机器学习或深度学习计划。对于集体开发者和学生党都能够收费申领 Azure。
对于集体开发者,你只须要一张信用卡,就能够申领 Azure 200 美金的收费额度;
对于学生党,你只须要有一个 edu 邮箱,就能够申领 Azure 100 美金的收费额度.
这个额度足够你在 Azure 上应用一个 K80 的计算实例从 0 开始学习 CUDA 编程。(或者有些小伙伴心愿 A100,但集体感觉 K80 对于初哥曾经十分足够了)。以下是构建形式:
在 Azure 门户上创立 Azure 机器学习工作区
进入门户,点击“创立资源”,抉择 AI + 机器学习,再抉择 Azure Machine Learning
进入 Azure Machine Learning 后,须要增加 Azure 机器学习工作区所在资源组和相干的名字,这里特地提醒,Azure 上只有 West US 2 的区域提供了 GPU 相干的计算实例,所以在选用时,肯定要选用 West US 2,否则你没法应用 GPU 的计算实例。
当确认好后,点击“审阅和创立”,确认无误后,再点击“创立”,稍等片刻就能够顺利地实现 Azure 机器学习工作区的创立。
创立实现后,间接进入创立好的 Azure 机器学习工作区。
点击工作室 Web URL 进入属于你的机器学习环境
创立 Azure 机器学习计算实例
Azure 机器学习计算实例是面向数据科学家的基于云的托管式工作站,它针对机器学习场景进行了优化,并联合 JupyterLab,Jupyter Notebook,VS Code 进行我的项目构建和模型部署。
咱们通过左侧菜单,点击治理模块下的计算,抉择新建,创立一个计算实例
因为波及到 CUDA 编程,所以必须抉择 GPU
留神: 如果你心愿获取更强的 GPU,能够点击“从所有选项中抉择”,但你可能须要提交配额申请,该文章提及内容只针对通用的 K80。
点击创立后,稍等片刻,你的计算实例就创立胜利了。
计算实例上的第一个 CUDA 程序
在创立好的计算实例中抉择终端
你能够通过终端别离输出一下命令查看相干 cuda 对应信息
nvidia-smi
nvcc -V
进入后创立一个 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
运行胜利,如下图
留神: 因为 K80 绝对比拟旧的架构,所以你须要设定好编译时的对应的相干设定,否则你没法顺利执行 GPU 的相干调用,以下是相干的架构对应图
为 CUDA 编程增加 Notebook ⽀持
喜爱应用 Jupyter Notebook 是开发人员的应用习惯,网上有很多都是针对友商的环境的设定,但这个你须要佛跳墙。所以我做了一下调整,让他能够在 Azure 机器学习环境中进行,步骤如下,在作者区域抉择“Notebooks”,创立一个 notebook 文件夹,抉择创立一个新文件。
Azure 计算实例还是很不便的,因为你不须要配置任何货色,就能够把 Nvidia 驱动,CUDA, CUDNN 等货色配置好了。大家终于不必因为环境而从入门到放弃了!
抉择 Kernel 为 Python3.8 – Azure ML
在新创建的 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;
}
而后输出运行,后果如下:
这个时候你就能够用 Notebook 去运行 CUDA 程序了。
当然 Azure 机器学习能够反对本地 VS Code 的编写,你只须要抉择在 VS Code 中编辑,你就能够在本地 VS Code 编写你的 CUDA 代码,这样更不便。
补充:当你不必时,切记把计算实例敞开,否则很容易会耗费完,尽管 K80 是 0.9 美元每小时,对于收费额度还是足够实现所有 CUDA 编程学习,然而也是能省则省。
后记
通过 Azure 你能够收费搭建一个 GPU 的环境进行 CUDA 学习,太不便了。或者 CUDA 学习还有一段很长的路,但解决了硬件问题,是各位学生党和集体开发者的福音啊!还不来尝试一下?
相干资源:
- 集体收费 Azure 申请
- 学生收费 Azure 申请
- 理解 Azure 机器学习
- 理解 CUDA 编程
点击理解更多相干材料~