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 关系和关系变量 每一个关系都有一…

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