微信扫码
添加专属顾问
我要投稿
最近在GPU上部署模型,才了解到CUDA,废话少说,来了解下CUDA!
看效果
这是2个向量的加法的加法,使用GPU来计算的!
话原理
概念
CUDA stands for Compute Unified Device Architecture,是英伟达开发的并行计算和编程的框架,使得开发者可以使用GPU用于通用处理任务,而不仅仅局限于图形渲染!
这里我们理解下GPU,对比CPU的计算单元,可以看到GPU的计算很多!
NVIDIA GPU 的并行计算的工作流程,在代码上分为两步:
1. CPU 调用核函数的函数,该函数由 GPU 执行。
2. GPU 根据给定的并行量,并行执行该函数。
CUDA 中,执行核函数的一个基本单位被称为线程(thread)。若干个 thread 组合成线程块(block),而一次调用中所有的线程块组成了一个网格(grid)
CPU 调用核函数的同时,会指定执行该核函数的线程块数量和每个线程块中线程的数量。这也就意味着,核函数中的内容会被并行地执行线程块的数量 ×每个线程块内的线程数量次!
核函数
__global__ 是 CUDA C/C++ 的函数修饰符,表示该函数为核函数
核函数会在 GPU 上执行,但由主机代码调用
返回类型必须为 void
在调用kernel函数时,函数名后的<<<b, t>>>:b代表线程块的数目,t代表每个线程块的线程数目。
__global__ void myKernel() {printf("Hello world\n");}int main(int argc, char const *argv[]) {myKernel<<<4,2>>>();return 0;}
比如这个代码,是4个线程块和每个线程块中2个线程来执行,就会输出8个 hello world
其他,比如内存的分配和回收;主机(CPU)和设备(GPU)之前的数据传输,错误处理等
本次的CUDA编程会涉及到如下的环节
1)定义CUDA核函数vectoradd,是__global__ void
这里说明了向量相加,,这个就是核函数,是GPU来运行
2)定义主函数 main,
定义参数
分配GPU的内存
初始化数据
将数据从主机内存复制到设备内存
调用CUDA核函数
将结果从设备内存复制回主机内存
打印结果
释放GPU内存
来实践
Sudo vi /root/ .bashrc
sudo vim cuda_program.cu
// 示例:vector_add.cu#include// CUDA核函数,对两个向量进行加法操作__global__ void vectorAdd(int *a, int *b, int *c, int n) { int tid = blockIdx.x * blockDim.x + threadIdx.x; if (tid < n) c[tid] = a[tid] + b[tid];}int main() { int n = 10; int a[n], b[n], c[n]; int *dev_a, *dev_b, *dev_c; // 分配GPU内存 cudaMalloc((void**)&dev_a, n * sizeof(int)); cudaMalloc((void**)&dev_b, n * sizeof(int)); cudaMalloc((void**)&dev_c, n * sizeof(int)); // 初始化数据 for (int i = 0; i < n; i++) { a[i] = i; b[i] = i * i; } // 将数据从主机内存复制到设备内存 cudaMemcpy(dev_a, a, n * sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(dev_b, b, n * sizeof(int), cudaMemcpyHostToDevice); // 定义CUDA核函数调用配置 dim3 blocksPerGrid(1); dim3 threadsPerBlock(n); // 调用CUDA核函数 vectorAdd<<>>(dev_a, dev_b, dev_c, n); // 将结果从设备内存复制回主机内存 cudaMemcpy(c, dev_c, n * sizeof(int), cudaMemcpyDeviceToHost); // 打印结果 printf("Vector addition result:\n"); for (int i = 0; i < n; i++) { printf("%d + %d = %d\n", a[i], b[i], c[i]); } // 释放GPU内存 cudaFree(dev_a); cudaFree(dev_b); cudaFree(dev_c); return 0;}
nvcc -o cuda_program cuda_program.cu
. / cuda_program
写在最后
最近去周末闲着去看了下教育房子,看到好的教育资源这么近,仿佛是另外一个世界,第一次这么现实,难免感概!(如果上天....我愿意苦10年让我的孩子能接受更好的教育)简直是一个太振奋人心的信息!
也像一个梦,一个奋斗的梦,这个梦是我期望我的后代的接受教育,我们都生活在现实中!有真实的现在!我是否应该去四处奔走争取,未来12年后,会为了这次的没去争取而遗憾吗......
模型的部署的比想象中的麻烦,我申请好了云GPU,预装了CUDA镜像,但是,模型咋都下载不下来,我现在正在从公hugging face上下载,,巨慢已经下载近2天了...keep moving!
beads 珠子
Paleolithic period 旧石器时代
slabs 厚板
in galleries immediately off the inhabited areas of caves
bare walls裸露的墙壁
no backdrops(背景) or environmental trappings
depicted(描绘) in cave art
sought to 寻求
evidence of chips(碎片) in the painted figures
chief motivation
herds of game成群的猎物
explicitly revealed
bovines牛科动物
meatier 多肉的
tusks and horns 象牙和角
unpredctability
mammoths(长毛象), bovines, and horses
reindeer 驯鹿
was not confined to 不局限于
shafts 竖井
notation 符号,记号
artworks 艺术品
an expression of a desire for fertility 渴望生育
参考
https://dingfen.github.io/mpi&openmp/2021/10/08/cuda-beginer.html
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-04-30
旅行规划太难做?5 分钟构建智能Agent,集成地图 MCP Server
2025-04-29
10万元跑满血版DeepSeek,这家公司掀了一体机市场的桌子|甲子光年
2025-04-29
谷歌大神首次揭秘Gemini预训练秘密:52页PPT干货,推理成本成最重要因素
2025-04-29
一文说清:什么是算法备案、大模型备案、大模型登记 2.0
2025-04-29
MCP:AI时代的“万能插座”,大厂竞逐的焦点
2025-04-29
打起来了!MCP VS A2A,谁才是Agent的未来事实标准?
2025-04-29
Google 的 A2A 与 MCP 该如何选择?还是两种都用?
2025-04-29
一站式AI应用开发平台 Firebase Studio
2024-08-13
2024-06-13
2024-08-21
2024-09-23
2024-07-31
2024-05-28
2024-08-04
2024-04-26
2024-07-09
2024-09-17
2025-04-29
2025-04-29
2025-04-29
2025-04-28
2025-04-28
2025-04-28
2025-04-28
2025-04-28