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.mzph.cn/news/282177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《视图更新与关系数据库理论》——2.1 关系和关系变量

本节书摘来自异步社区出版社《视图更新与关系数据库理论》一书中的第2章&#xff0c;第2.1节&#xff0c;作者&#xff1a;【美】C.J. Date&#xff08;达特&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.1 关系和关系变量 每一个关系都有一…

PHP格式化全国省市区列表

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

从 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项&…

搭建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;能…

《零信任的基石:使用 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;更多章节内容可以访问云栖社区“异步社区”公众号查看。 创建和使用自己的文件夹结构 花费约两小时为电子邮件…

《实用软件架构:从系统环境到软件部署 》——2.4 架构视图与架构视点

本节书摘来自华章出版社《实用软件架构&#xff1a;从系统环境到软件部署》一书中的第2章&#xff0c;第2.4节&#xff0c;作者&#xff1a;[印]蒂拉克米特拉&#xff08;Tilak Mitra&#xff09;著&#xff0c;爱飞翔 译&#xff0c;更多章节内容可以访问云栖社区“华章计算机…

TCP:当初取代NCP,如今害怕被取代

我叫TCP&#xff08;Transmission Control Protocol&#xff09;也叫传输控制协议。不觉回忆1983年&#xff0c;亲手将NCP协议淘汰&#xff0c;取而代之的是我&#xff0c;成了火遍大江南北的网络红人之一。现如今&#xff0c;我感受到前所未有的恐惧&#xff0c;因为我一生的敌…

批处理中的IF详解

在CMD使用IF /?打开IF的系统帮助会发现IF有3种基本的用法! 第一种用法&#xff1a;IF [NOT] ERRORLEVEL number command 这种用法现在很少用了&#xff0c;因为它需要使用到CHOICE命令&#xff0c;这个命令现在被set /p代替了&#xff0c;它是判断CHOICE命令选择的选项的&…

fullcalendar 显示的时间间隔只有四十五分钟_【体能新视点】——女子篮球运动员比赛期间的心率、血乳酸浓度和时间运动分析...

女子篮球运动员比赛期间的心率、血乳酸浓度和时间-运动分析—摘要—本研究的目的是检验女子篮球运动员在比赛规则改变后的生理需求和运动模式。在九场正式比赛中&#xff0c;对九名大学代表队队员进行了研究。每场比赛都被录像以确定主要动作的频率&#xff0c;连续记录心率&am…

《JavaScript机器人编程指南》——1.2 NodeBot是什么,基本词汇还有哪些

本节书摘来异步社区《JavaScript机器人编程指南》一书中的第1章&#xff0c;第1.2节&#xff0c;作者&#xff1a;【美】Kassandra Perch&#xff08;珀芝&#xff09;&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 NodeBot是什么&#xff0c;基本词…

解决在Python中使用Win32api报错的问题,No module named win32api

一、系统环境 操作系统: Win7 64位 Python&#xff1a;3.7.0 二、在使用import win32api时&#xff0c;报错:No module named win32api 网上查到有下面解决办法&#xff1a; 方法1&#xff1a;pip install pypiwin32或pip3 install pypiwin32 或 python -m pip install pypiwin…

《Python游戏编程入门》——1.2 初识Python

本节书摘来自异步社区《Python游戏编程入门》一书中的第1章&#xff0c;第1.2节&#xff0c;作者[美]Jonathan S. Harbour &#xff0c;李强 译&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.2 初识Python Python既是一个软件工具包&#xff0c;也是一种…

大数据:Parquet文件存储格式

一、Parquet的组成 Parquet仅仅是一种存储格式&#xff0c;它是语言、平台无关的&#xff0c;并且不需要和任何一种数据处理框架绑定&#xff0c;目前能够和Parquet适配的组件包括下面这些&#xff0c;可以看出基本上通常使用的查询引擎和计算框架都已适配&#xff0c;并且可以…