- 博客(332)
- 资源 (2)
- 收藏
- 关注
原创 解读CUDA Compiler Driver NVCC - Ch.5
前言前面几篇文章,我们了解了NVCC的作用,nvcc编译的two stage, 每个stage做了什么,怎么去选择虚拟架构和真实架构,JIT编译的原理,好处和弊端以及解决方案。本文我们将了解几个实际的nvcc编译命令。Base Notationnvcc提供了选项--gpu-architecture和--gpu-code。--gpu-architecture只能选择一个值,用来指定虚拟架构的名称,如下:--gpu-architeture=compute_50--gpu..
2022-01-20 23:21:01
1181
原创 解读CUDA Compiler Driver NVCC - Ch.4
前言第四章是详细的NVCC选项描述和用法,我们可以把它当作工具手册,在需要的时候去查看即可,感兴趣的话也可以花时间去了解。但现在,更重要地是理解,NVCC在编译CUDA程序的时候,具体做了什么,有什么作用,这些内容,我们将在完成本文阅读后得到答案。GPUGenerations为了让GPU 架构进化,NVIDIA GPU被发布为不同的generation。新的generation会引入功能性或者芯片架构上的重大改进,而同一个generation的GPU models只有轻微的...
2022-01-20 23:19:55
691
原创 解读CUDA Compiler Driver NVCC - Ch.3
前言上一篇文章简单了介绍了nvcc预定义的宏,以及支持的编译阶段,对应的输入文件后缀和输出文件的默认名。本篇文章了解CUDA源文件编译的整个workflow。OverviewCUDA编译的工作原理如下:输入程序经过设备编译编译预处理,编译为CUDA二进制(cubin)和/或PTX中间代码,被放置在一个fatbinary。输入程序再次预处理以供主机编译,嵌入到 fatbinary,并将 CUDA 特定 C++ 扩展转换为标准 C++ 构造。然后 C++ 主机编译器将把...
2022-01-20 23:19:00
501
原创 解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases
前言上篇文章我们了解了nvcc是做什么的,本篇文章我们会了解Compilation Phases,编译阶段,nvcc预定义的宏,编译支持的文件格式等。NVCC Identificaiton Macronvcc预定义了以下的宏:__NVCC__:在编译C/C++/CUDA源文件时定义__CUDACC__:在编译CUDA源文件时定义__CUDACC_RDC__:在relocatable device code mode下编译CUDA源文件时定义__CUDACC_EWP__...
2022-01-20 23:18:20
583
原创 解读CUDA Compiler Driver NVCC - Ch.1 - Introduction
前言从这个系列开始,我会解读《CUDA Compiler Driver NVCC》的内容。通过这本书,可以更深刻地了解GPU 编译的底层相关的设计。CUDA Programming ModelCUDA Toolkit针对这样一类应用程序:它的控制部分由一个进程运行在一个通用计算设备(比如CPU)上,利用一个或多个GPU作为coprocessors来加速single program multiple data (SPMD)并行任务。这些任务可以由一系列GPU 线程来执行,而不用主机进程的干..
2022-01-20 23:17:25
832
原创 【Grokking the System Design】- 设计一个 TinyURL服务
前言本文来看,如何设计一个缩短URL的服务,比如TinyURL.此服务将为长URL提供短的alias别名,重定向到原始的URL。类似服务:bit.ly、goo.gl、qlink.me 等。(难度级别:简单)接下来我们应用之前了解的基本步骤来进行设计,可回顾Grokking the System Design - 总览。Step 1: Requirements clarifications在澄清需求之前,先来了解下为什么需要URL 缩短功能。URL 缩短用于为长 URL 创建.
2022-01-20 23:14:30
2530
原创 Tensorflow模型优化训练思路
问题现状随着深度学习模型越来越大,数据集越来越大,模型的训练变得越来越慢。这对于想要快速验证算法的研究人员来说,是个比较麻烦的问题。那么一般来说,我们会想要优化模型训练,以期更快验证模型效果。无论是使用Tensorflow还是Pytorch来搭建模型,基本的训练优化思路都是一致的,只是由于框架的不同,某些优化细节有些差别。这里探讨的是模型在GPU上的训练优化。基本的训练优化思路Step 1 优化模型在单机单卡上的训练 Step 2 优化模型在单机多卡上的训练 Step 3 优化模
2021-02-23 22:30:21
1133
2
原创 混合精度训练-Automatic Mixed Precision
双/单/半精度浮点数在尽可能减少精度损失的情况下利用半精度浮点数(FP16)来加速训练。以下简单对比双/单/半精度浮点数:双精度浮点数:FP64(64bits=8bytes)单精度浮点数:FP32 (32bits=4bytes)半精度浮点数:FP16 (16bits=4bytes)可以看到,双/单/半精度浮点数表示的范围不同,因此存储它们所需要的硬件内存也不同了。其中,一个FP16浮点数占用内存是FP32的一半,但是它所表示的范围也大大减少,因此,纯粹使用FP16进行
2021-02-22 20:33:53
1273
原创 深度学习模型的并行训练:数据并行VS模型并行
数据并行由于训练数据集太大,而无法一次将其全部载入内存。因此将数据集分为N份,分别装载到N个GPU节点中去进行梯度求导,然后将所有节点的求导结果进行加权平均,再sync update给所有节点(对于每个节点来说,我们使用相同的模型参数进行前向传播。)。然后继续进行下一步的训练,直到模型收敛或者提前停止训练。如上图所示,GPU1和GPU2上都装载有完整的模型,但是它们使用不同的子数据集Batch进行训练,每次每个节点的推导结果进行加权平均然后sync到所有的GPU节点上,再继续下一步迭代。.
2021-02-21 22:21:43
6801
原创 Switch Transformer模型解读-Introduction
论文相关资料论文 Switch Transformer: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity下载地址https://arxiv.org/pdf/2101.03961.pdf github 代码:https://github.com/tensorflow/mesh/blob/master/mesh_tensorflow/transformer/moe.py论文解读Introduction
2021-01-23 22:26:09
1232
原创 NVIDIA Nsight Systems 入门及使用
目录# Nsight Systems 入门什么是Nsight Systems用户能用nsys做什么CUDA VersionNsight Systems 使用nsys windows 版本GUI使用步骤nsys Linux CLI (Command Line Interface)常见命令# Nsight Systems 入门什么是Nsight SystemsNVIDIA Nsight Systems,简称nsys,是一个低开销的系统分析工具。在本文档中,我..
2021-01-21 12:03:38
56090
5
原创 TorchScript学习笔记
学完本篇文章,您将学习到Torchscript的概念与相关知识 如何将Pytorch转化为torchscript 使用torchscript部署模型:https://cugtyt.github.io/blog/effective-pytorch/20190912.htmlTorchscript简介TorchScript 是 PyTorch 模型(nn.Module的子类)的中间表示形式,可以在高性能环境(例如 C ++)中运行。TorchScript是一种从PyTorch代码创建可..
2021-01-19 15:26:01
812
原创 Transformer & BERT 详解第1篇(共4篇)
本系列文章围绕以下几个主题来详细解读Transformer和BERT的原理和发展Transformer 模型详解 Transformer在CV,NLP,推荐系统的发展与应用 BERT模型详解 BERT最新发展与应用本篇文章:Transformer模型详解整体结构 Encoder Decoder Positional Encoding Self Attention Add & Norm1. 整体结构Transformer主要由两大部分组成:Encoder &.
2021-01-15 22:29:07
788
原创 link-register spilling
https://developer.download.nvidia.cn/CUDA/training/register_spilling.pdf
2020-11-17 10:35:19
367
转载 人工智能的顶会有哪些
人工智能和机器学习技术的快速发展,使得AI 主题会议也层出不穷,下面带大家一起了解一下人工智能领域的顶会都有哪些1.CVPR国际计算机视觉与模式识别会议(CVPR)是IEEE一年一度的学术性会议,会议的主要内容是计算机视觉与模式识别技术。CVPR是世界顶级的计算机视觉会议(三大顶会之一,另外两个是ICCV和ECCV),近年来每年有约1500名参加者,收录的论文数量一般300篇左右。本会议每年都会有固定的研讨主题,而每一年都会有公司赞助该会议并获得在会场展示的机会。2.ECCVECCV的全称.
2020-11-16 23:02:34
4476
原创 GPU优化之Bank 冲突
什么是bank?shared memory被划分成大小相同的模块,这些模块叫做bank。不同bank可以被同时读写,将shared memory如此划分,将使得shared memory的访存带宽大大增加。如果shared memory被划分成16个bank,那么它的访存带宽会比不划分bank时快16倍。shared memory的访存速度是仅次于register,而又比global memory快100多倍。bank 冲突同一个Warp中不同线程去访问shared memory中.
2020-11-12 12:06:16
2199
原创 GPU性能衡量指标
GPU加速优化之前,我们先看看GPU的性能衡量。FLOPS OccupancyFLOPS(Floating-point-operations-per-second)每秒浮点运算量,是衡量GPU硬件计算能力的指标。Occupancy占有率,每个SM的活动线程束(possible active warps)数量与实际的活动线程束(active warps)数量的比值。它是衡量CUDA硬件执行效率的指标。CUDA上的线程指令是串行执行的。因此,在某些warp被暂停或者阻塞的时候,启动另外.
2020-11-11 13:28:58
4852
原创 link_cuda
https://www.nvidia.cn/docs/IO/51635/NVIDIA_CUDA_Programming_Guide_1.1_chs.pdf
2020-10-28 19:38:27
279
原创 OS-outline
操作系统【计算机系统概述】概论:特征 并发: 两个或多个事件在同一时间间隔发生。 共享:资源共享。系统资源可供内存中多个并发执行的进程共同使用,互斥共享和同时访问方式。 虚拟:虚拟处理器/虚拟内存/虚拟外部设备。 异步:进程以不可预知的速度向前推进。 目标和功能 计算机系统资源的管理者:处理机/存储器/文件/设备。 用户与计算机系统之间的接口 命令接口:联机命令接口/脱机命令接口 程序接口:系统调用(广义指令) GUI:图像接口 扩充机器:没有
2020-10-27 19:54:43
346
原创 解读CUDA C Programming Guide 第三章第2节
本文简单解读第三章:Programming Interface.本书旨在介绍进行CUDA并行优化的C编程指导。共5章,内容分别是: Introduction Programming Model Programming Interface Hardware Implementation Performance Guidelines 本章主要内容包括: Compilation with NVCC CUDA C Runtime..
2020-10-25 15:04:15
236
原创 C++ STL六大组件-6-Allocator(分配器)
C++ STL六大组件-简析------------------------------------------C++ STL六大组件-1-Container(容器) C++ STL六大组件-2-Adapter(适配器)C++ STL六大组件-3-Algorithm(算法)C++ STL六大组件-4-Iterator(迭代器)C++ STL六大组件-5-Function object(函数对象)C++ STL六大组件-6...
2020-10-20 21:44:08
825
原创 C++ STL六大组件-5-Function object(函数对象)
C++ STL六大组件-简析------------------------------------------C++ STL六大组件-1-Container(容器) C++ STL六大组件-2-Adapter(适配器)C++ STL六大组件-3-Algorithm(算法)C++ STL六大组件-4-Iterator(迭代器)C++ STL六大组件-5-Function object(函数对象)C++ STL六大组件-6...
2020-10-20 21:33:50
1353
原创 C++ STL六大组件-4-Iterator(迭代器)
视C++为一个语言联邦: 理解C++的全貌,学习C++的编程范式:过程/面向对象/函数式/元编程/泛型编程。 尽量以const/enum/inline替换#define:对于单纯的常量,最好用const对象/enums来替换#define,对于形似函数的宏,最好用inline函数替换#define. 尽可能使用const:const可以用于任何作用域内的对象/函数参数/函数返回类型/成员函数本体。可以帮助避免出错。 确定对象被使用前已经先被初始化:读取未初始化的值会导致不明确的行为。 了解C++ .
2020-10-16 20:42:15
759
原创 【操作系统】章节总结
操作系统【计算机系统概述】概论:特征 并发: 两个或多个事件在同一时间间隔发生。 共享:资源共享。系统资源可供内存中多个并发执行的进程共同使用,互斥共享和同时访问方式。 虚拟:虚拟处理器/虚拟内存/虚拟外部设备。 异步:进程以不可预知的速度向前推进。 目标和功能 计算机系统资源的管理者:处理机/存储器/文件/设备。 用户与计算机系统之间的接口 命令接口:联机命令接口/脱机命令接口 程序接口:系统调用(广义指令) GUI:图像接口 扩充机器:没有
2020-10-15 19:46:29
436
原创 Improve Path within 100 days
Operating system Coding language: C++ Algorithms Sorting Data structures Mathematics Graphs Recursion System Design Linux CudaLeetcode: 5*100 day (1*easy+3*medium+1*hard)100天的学习提升计划,每半个月至少进行一次面试实战。待续。。。...
2020-10-14 20:58:13
202
原创 C++ STL六大组件-3-Algorithm(算法)
C++ STL六大组件-简析------------------------------------------C++ STL六大组件-1-Container(容器) C++ STL六大组件-2-Adapter(适配器)C++ STL六大组件-3-Algorithm(算法)算法简介 算法分类 非可变序列算法 可变序列算法 排序算法 数值算法 算法细分 查找算法(13个) 排序和通用算法(14个) 删除...
2020-08-20 19:57:36
643
原创 C++ STL六大组件-2-Adapter(适配器)
C++ STL六大组件-简析-----------------------------------------------------------------------------------------------Container(容器) Adapter(适配器) 容器适配器 queue priority_queue stack 函数适配器 迭代器适配器 Algorithm(算法) Iterator(迭代器)...
2020-08-19 18:49:46
2121
原创 C++ STL六大组件-1-Container(容器)
C++ STL六大组件-简析----------------------------------------------------------------------------------------------------------------------------------------------C++ STL六大组件-1-Container(容器)容器定义 常见容器 容器分类 顺序容器 vector deque list 关联容器 map .
2020-08-19 13:42:44
2278
2
原创 C++ STL六大组件-简介
STL(Standard Template Library),即标准模板库,是一个高效的C++程序库。包含了诸多在计算机科学领域里常用的基本数据结构和基本算法。从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的。STL的六大组件如下:Container(容器) Adapter(适配器) Algorithm(算法) Iterator(迭代器) Fu...
2020-08-18 11:25:40
4449
原创 Google Interview Guide 《谷歌面试指南》
谷歌,是大部分程序员的Dream company.一直以来,我因谷歌的面试难度而被吓退。其实,如果有人能告诉我,想要进谷歌需要拥有哪些技能,那我便有了学习的方向,相信通过不断练习,总能更接近那个门槛。哪怕不是去谷歌,也可以试试苹果,微软等这样的外企。好消息,现在就是有这样的一个Guide:《谷歌面试指南》。文末附上全文。我打算按着这个指南,慢慢准备半年。如果你也感兴趣,可以一起呀。下面附上全文:===================================..
2020-07-24 11:56:46
1091
原创 修改代码的艺术 work effectively with legacy code
可以说,大部分的程序员每天最多的工作就是修改遗留代码。缺少测试的代码,就是遗留代码。缺少测试的代码非常糟糕。没有测试,我们无法快速且有保证地修改代码。修改机制修改代码的四大原因:增加特性 修正缺陷 改善设计 优化资源这四个修改代码的原因会对遗留代码带来以下影响 增加特性 修正缺陷 改善设计 优化资源 功能 - ...
2020-07-14 19:08:05
441
原创 Grokking the System Design Interview: 如何应对系统设计面试
拥有良好的系统设计能力,是一个优秀程序员的必要素质。当然更重要的是,越来越多的公司在面试中考察系统设计能力,尤其是外企巨头,如谷歌,亚马逊,微软等。这些公司对于社招的软件工程师往往有这方面的要求。但是系统设计和算法题不一样,它考察的是程序员对于复杂系统的理解与设计,更重要的是沟通与思维。还有一点不一样的是,每一个系统设计问题都没有明确唯一的答案,目前也没有直接的教材。不过,令人高兴的是,国外目前有一本关于系统设计的书,详细讲解了系统设计涉及到的方方面面,它用几个实际例子引导读者一步步了解并熟悉系
2020-06-05 18:30:45
12815
3
原创 Linux系统课程—day1 笔记
Linux 最常见的知识点。在Day 1Stat 显示文件或文件系统的详细信息· 比l s输出的信息更详细Dup2/Fcntl dup复制文件描述符程序和进程-并行和并发 并发:单核cpu 分成若干个时间碎片,多个进程轮询使用cpu的时间碎片 并行:多核cpu,单个进程可以同时利用多个cpu的资源pcb 进程控制块,用于维护进程的各种信息和数据,分为内核区和用户数据区 内核区 Pid等信息 用户区 栈 堆 代码段 未初始化的
2020-05-28 22:19:17
243
原创 Grokking Coding: Sliding Window滑动窗口训练
从上面能看到,Sliding Window一共7题,对应力扣,分别是:滑动窗口的最大值Maximum Subarray (Easy)Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.Example:Input: [-2,1,-3,4,-1,2,1,-5,4],Ou.
2020-05-10 22:58:57
350
原创 Grokking the Coding Interview: 如何刷leetcode
网上有一门课“Grokking the Coding Interview”专门用来教大家如何通过科学刷题,提升算法能力的。这里列出了leetcode的15个标签,按照标签来刷题,可以高质量地掌握对应算法与技巧。这里提到的leetcode的一共是82道。可以按照自己的速度来完成训练。我呢,以前立了不少flag,好多都倒了。现在再立一个:2周刷完这15个标签对应的82题。如果这个flag没倒,那么这件事完成之后,要学的东西是“Grokking the System Design”,具体计划到时候再列吧。.
2020-05-10 21:02:07
2277
原创 深度学习优化器的原理总结(SGD/SGD with momentum/Adagrad/AdaDelta/RMSProp/Adam/Nadam)
优化器的框架:目标函数关于当前参数的梯度 ; 根据历史梯度计算一阶动量与二阶动量: ; ; 计算当前时刻的下降梯度: ; 根据更新参数: ; 现在我们来一个个分析现有的优化器,如何套入以上的框架。简单来说,它们的区别就在于和的定义。SGD特点:没有使用动量...
2020-04-24 16:20:25
3469
1
原创 Yolo v1 v2 v3的发展与细节
Yolo v1+2+3都是目标检测模型。目标检测模型; Yolo v1 Yolo v2 Yolo v3 总结: 发展路线和区别;一、目标检测模型目标检测可分为两个步骤:Step1: 检测目标位置(生成矩形框)Step2: 对目标物体进行分类物体检测主流算法主要分为one-stage和two-stageOne-stage:Yolo...
2020-04-20 17:30:54
886
原创 时间的尽头,是永恒的宇宙吗?
在时间的长河里,人类到底渺小到什么程度,宇宙到底无垠到什么程度。万物皆奇迹,乃至黑暗与寂静......--海伦·凯勒目前已知最长的人类寿命没有超过200年的,人类的历史也不到一万年。我们可以通过考古来尝试发现和理解古人的文明,而我们只能通过推测,在时间的长河里,人类未来的走向,宇宙未来的模样。毫无疑问,人类是会灭亡的。但那是在很久很久以后了。随着时间流逝,我们慢...
2020-04-16 22:58:28
1108
原创 常见图像传统处理算法-边缘检测-分割-增强-降噪
一、边缘检测边缘检测的几种微分算子:一阶微分算子:Roberts、Sobel、Prewitt 二阶微分算子:Laplacian、Log/Marr 非微分算子:Canny一阶微分算子1.Roberts: 没有经过图像平滑处理,图像噪声无法得到较好的抑制,但图像边缘定位精度较高。2. Sobel:引入了类似局部平均的运算,对噪声有平滑作用,能很好的消除噪声的影响。与Prewi...
2020-04-06 12:26:01
15707
转载 参数与超参数
写在前面 关于训练深度学习模型最难的事情之一是你要处理的参数的数量。无论是从网络本身的层宽(宽度)、层数(深度)、连接方式,还是损失函数的超参数设计和调试,亦或者是学习率、批样本数量、优化器参数等等。这些大量的参数都会有网络模型最终的有效容限直接或者间接的影响。面对如此众多的参数,如果我们要一一对其优化调整,所需的无论是时间、资源都是不切实际。结果证实一些超参数比其它的更为重要,因此认识各个...
2020-03-23 15:59:39
1648
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人