当前位置: 首页 > news >正文

商丘网站建设软件公司网络推广运营外包公司

商丘网站建设软件公司,网络推广运营外包公司,国家企业公示网入口官网登录,阿里邮箱注册pytorch的C extension写法 这部分主要介绍如何在pytorch中添加自定义的算子,需要以下cuda基础。就总体的逻辑来说正向传播需要输入数据,反向传播需要输入数据和上一层的梯度,然后分别实现这两个kernel,将这两个kernerl绑定到pytorch即可。 a…

pytorch的C++ extension写法

        这部分主要介绍如何在pytorch中添加自定义的算子,需要以下cuda基础。就总体的逻辑来说正向传播需要输入数据,反向传播需要输入数据和上一层的梯度,然后分别实现这两个kernel,将这两个kernerl绑定到pytorch即可。

add

  • 但实际上来说,这可能不是一个很好的教程,因为加法中没有对输入的grad_out进行继续的操作(不用写cuda的操作)。所以实际上只需要正向传播的launch_add2函数。更重要的是作者大佬写了博客介绍。
// https://github.com/godweiyang/NN-CUDA-Example/blob/master/kernel/add2_kernel.cu__global__ void add2_kernel(float* c,const float* a,const float* b,int n) {for (int i = blockIdx.x * blockDim.x + threadIdx.x; \i < n; i += gridDim.x * blockDim.x) {c[i] = a[i] + b[i];}
}void launch_add2(float* c,const float* a,const float* b,int n) {// 创建 [(n + 1023) / 1024 ,1 ,1]的三维向量数据dim3 grid((n + 1023) / 1024);//dim3 为CUDA中三维向量结构体// 创建 [1024 ,1 ,1]的三维向量数据dim3 block(1024);// 函数add2_kernel实现两个n维向量相加// 共有(n + 1023) / 1024*1*1个block , 每个block有1024*1*1个线程add2_kernel<<<grid, block>>>(c, a, b, n);
}

在这里插入图片描述

binary activation function

  • 正向计算为:
x > 1 ? 1 : -1;// 也可以使用sign() 函数(求符号函数)实现
  • 这篇文章作者没有自己写正向传播的算子,使用的是at::sign
// https://github1s.com/jxgu1016/BinActivateFunc_PyTorch/blob/master/src/cuda/BinActivateFunc_cuda.cpp#L17-L22
at::Tensor BinActivateFunc_forward(at::Tensor input) 
{CHECK_INPUT(input);return at::sign(input);
}
  • 这篇文章用的Setuptools将写好的算子和pytorch链接起来,运行时需要安装一下(JIT运行时编译也很香,代码直接运行,就是cmakelist.txt需要各种环境配置很麻烦)。绑定部分见链接。以下是作者实现的反向传播的kernel:
// https://github.com/jxgu1016/BinActivateFunc_PyTorch/blob/master/src/cuda/BinActivateFunc_cuda_kernel.cu
#include <ATen/ATen.h>#include <cuda.h>
#include <cuda_runtime.h>#include <vector>// CUDA: grid stride looping
#define CUDA_KERNEL_LOOP(i, n) \for (int i = blockIdx.x * blockDim.x + threadIdx.x; i < (n); i += blockDim.x * gridDim.x)namespace {
template <typename scalar_t>
__global__ void BinActivateFunc_cuda_backward_kernel(const int nthreads,const scalar_t* __restrict__ input_data,scalar_t* __restrict__ gradInput_data) 
{CUDA_KERNEL_LOOP(n, nthreads) {if (*(input_data + n) > 1 || *(input_data + n) < -1) {*(gradInput_data + n) = 0;}}
}
} // namespaceint BinActivateFunc_cuda_backward(at::Tensor input,at::Tensor gradInput) 
{const int nthreads = input.numel();const int CUDA_NUM_THREADS = 1024;const int nblocks = (nthreads + CUDA_NUM_THREADS - 1) / CUDA_NUM_THREADS;AT_DISPATCH_FLOATING_TYPES(input.type(), "BinActivateFunc_cuda_backward", ([&] {BinActivateFunc_cuda_backward_kernel<scalar_t><<<nblocks, CUDA_NUM_THREADS>>>(nthreads,input.data<scalar_t>(),gradInput.data<scalar_t>());}));return 1;
}

swish

// https://github1s.com/thomasbrandon/swish-torch/blob/HEAD/csrc/swish_kernel.cu
#include <torch/types.h>
#include <cuda_runtime.h>
#include "CUDAApplyUtils.cuh"// TORCH_CHECK replaces AT_CHECK in PyTorch 1,2, support 1.1 as well.
#ifndef TORCH_CHECK
#define TORCH_CHECK AT_CHECK
#endif#ifndef __CUDACC_EXTENDED_LAMBDA__
#error "please compile with --expt-extended-lambda"
#endifnamespace kernel {
#include "swish.h"using at::cuda::CUDA_tensor_apply2;
using at::cuda::CUDA_tensor_apply3;
using at::cuda::TensorArgType;template <typename scalar_t>
void
swish_forward(torch::Tensor &output,const torch::Tensor &input
) {CUDA_tensor_apply2<scalar_t,scalar_t>(output, input,[=] __host__ __device__ (scalar_t &out, const scalar_t &inp) {swish_fwd_func(out, inp);},TensorArgType::ReadWrite, TensorArgType::ReadOnly);
}template <typename scalar_t>
void
swish_backward(torch::Tensor &grad_inp,const torch::Tensor &input,const torch::Tensor &grad_out
) {CUDA_tensor_apply3<scalar_t,scalar_t,scalar_t>(grad_inp, input, grad_out,[=] __host__ __device__ (scalar_t &grad_inp, const scalar_t &inp, const scalar_t &grad_out) {swish_bwd_func(grad_inp, inp, grad_out);},TensorArgType::ReadWrite, TensorArgType::ReadOnly, TensorArgType::ReadOnly);
}} // namespace kernelvoid
swish_forward_cuda(torch::Tensor &output, const torch::Tensor &input
) {auto in_arg  = torch::TensorArg(input,  "input",  0),out_arg = torch::TensorArg(output, "output", 1);torch::checkAllDefined("swish_forward_cuda", {in_arg, out_arg});torch::checkAllSameGPU("swish_forward_cuda", {in_arg, out_arg});AT_DISPATCH_FLOATING_TYPES_AND_HALF(input.scalar_type(), "swish_forward_cuda", [&] {kernel::swish_forward<scalar_t>(output, input);});
}void
swish_backward_cuda(torch::Tensor &grad_inp, const torch::Tensor &input, const torch::Tensor &grad_out
) {auto gi_arg = torch::TensorArg(grad_inp, "grad_inp", 0),in_arg = torch::TensorArg(input,    "input",    1),go_arg = torch::TensorArg(grad_out, "grad_out", 2);torch::checkAllDefined("swish_backward_cuda", {gi_arg, in_arg, go_arg});torch::checkAllSameGPU("swish_backward_cuda", {gi_arg, in_arg, go_arg});AT_DISPATCH_FLOATING_TYPES_AND_HALF(grad_inp.scalar_type(), "swish_backward_cuda", [&] {kernel::swish_backward<scalar_t>(grad_inp, input, grad_out);});
}

cg

  • ScatWave是使用CUDA散射的Torch实现,主要使用lua语言https://github.com/edouardoyallon/scatwave

  • https://github.com/huangtinglin/PyTorch-extension-Convolution

  • This is a tutorial to explore how to customize operations in PyTorch.

  • https://pytorch.org/tutorials/advanced/cpp_extension.html

  • 台湾博主 Pytorch+cpp/cuda extension 教學 tutorial 1 - English CC - B站搬运地址

  • pytorch的C++ extension写法

  • https://github.com/salinaaaaaa/NVIDIA-GPU-Tensor-Core-Accelerator-PyTorch-OpenCV

  • https://github.com/MariyaSha/Inference_withTorchTensorRT

  • 项目介绍了简单的CUDA入门,涉及到CUDA执行模型、线程层次、CUDA内存模型、核函数的编写方式以及PyTorch使用CUDA扩展的两种方式。通过该项目可以基本入门基于PyTorch的CUDA扩展的开发方式。

RWKV CUDA

  • 实例:手写 CUDA 算子,让 Pytorch 提速 20 倍(某特殊算子) https://zhuanlan.zhihu.com/p/476297195
  • https://github.com/BlinkDL/RWKV-CUDA
  • The CUDA version of the RWKV language model

数据加速

  • 用于在 Pytorch 中更快地固定 CPU <-> GPU 传输的库

环境

  • Docker images and github actions for building packages containing PyTorch C++/CUDA extensions.
    一个构建系统,用于生成(相对)轻量级和便携式的 PyPI 轮子,其中包含 PyTorch C++/CUDA 扩展。使用Torch Extension Builder构建的轮子动态链接到用户PyTorch安装中包含的Torch和CUDA库。最终用户计算机上不需要安装 CUDA。

CG

  • 又发现一个部署工具
研究人员很难将机器学习模型交付到生产环境。解决方案的一部分是Docker,但要让它工作非常复杂:Dockerfiles,预/后处理,Flask服务器,CUDA版本。通常情况下,研究人员必须与工程师坐下来部署该死的东西。安德烈亚斯和本创造了Cog。Andreas曾经在Spotify工作,在那里他构建了使用Docker构建和部署ML模型的工具。Ben 曾在 Docker 工作,在那里他创建了 Docker Compose。我们意识到,除了Spotify之外,其他公司也在使用Docker来构建和部署机器学习模型。Uber和其他公司也建立了类似的系统。因此,我们正在制作一个开源版本,以便其他人也可以这样做。如果您有兴趣使用它或想与我们合作,请与我们联系。我们在 Discord 上或给我们发电子邮件 team@replicate.com.

文章转载自:
http://typo.c7617.cn
http://stead.c7617.cn
http://heliotypography.c7617.cn
http://aviate.c7617.cn
http://miami.c7617.cn
http://traverse.c7617.cn
http://mucosity.c7617.cn
http://agitprop.c7617.cn
http://seminude.c7617.cn
http://perspicuous.c7617.cn
http://libellant.c7617.cn
http://planogamete.c7617.cn
http://manostat.c7617.cn
http://sciolistic.c7617.cn
http://erythroblastic.c7617.cn
http://importancy.c7617.cn
http://jaques.c7617.cn
http://exactness.c7617.cn
http://electrolytical.c7617.cn
http://chill.c7617.cn
http://appetent.c7617.cn
http://menshevik.c7617.cn
http://civvies.c7617.cn
http://beefcakery.c7617.cn
http://kirtle.c7617.cn
http://seafarer.c7617.cn
http://crossing.c7617.cn
http://conglobe.c7617.cn
http://infimum.c7617.cn
http://horseman.c7617.cn
http://spadger.c7617.cn
http://ting.c7617.cn
http://digamy.c7617.cn
http://isis.c7617.cn
http://overnutrition.c7617.cn
http://buccaneer.c7617.cn
http://margravate.c7617.cn
http://meccano.c7617.cn
http://fable.c7617.cn
http://halm.c7617.cn
http://resuscitative.c7617.cn
http://petcock.c7617.cn
http://beelzebub.c7617.cn
http://leif.c7617.cn
http://fatuity.c7617.cn
http://trousseau.c7617.cn
http://rangey.c7617.cn
http://manteau.c7617.cn
http://minifestival.c7617.cn
http://courageously.c7617.cn
http://washbasin.c7617.cn
http://whitleather.c7617.cn
http://capework.c7617.cn
http://menshevism.c7617.cn
http://dactyl.c7617.cn
http://resistante.c7617.cn
http://topless.c7617.cn
http://smasheroo.c7617.cn
http://drupaceous.c7617.cn
http://nighty.c7617.cn
http://praetorian.c7617.cn
http://ribby.c7617.cn
http://religionise.c7617.cn
http://unacquainted.c7617.cn
http://rikisha.c7617.cn
http://labroid.c7617.cn
http://amorce.c7617.cn
http://calcify.c7617.cn
http://copulin.c7617.cn
http://turku.c7617.cn
http://shipper.c7617.cn
http://lactogen.c7617.cn
http://lapsang.c7617.cn
http://bended.c7617.cn
http://safranine.c7617.cn
http://sunspecs.c7617.cn
http://dynamics.c7617.cn
http://elated.c7617.cn
http://dodecastyle.c7617.cn
http://bibcock.c7617.cn
http://cultivator.c7617.cn
http://chromophoric.c7617.cn
http://pallette.c7617.cn
http://connexity.c7617.cn
http://corporeally.c7617.cn
http://irrepealable.c7617.cn
http://unacted.c7617.cn
http://bengalese.c7617.cn
http://dotter.c7617.cn
http://tetraphonic.c7617.cn
http://ankyloglossia.c7617.cn
http://concerto.c7617.cn
http://minus.c7617.cn
http://comparativist.c7617.cn
http://cerebrospinal.c7617.cn
http://jurassic.c7617.cn
http://redhibition.c7617.cn
http://remarkable.c7617.cn
http://immeasurably.c7617.cn
http://metatrophic.c7617.cn
http://www.zhongyajixie.com/news/82443.html

相关文章:

  • 找别人做网站一般注意什么seo网站推广软件
  • 网站效果图模板b站推广网站2024年
  • 专门做毕业设计的网站农村电商平台有哪些
  • 网站建设 英文怎么说杭州搜索引擎推广排名技术
  • 网站开发学的啥网站模板图片
  • 德尔普网络做网站怎么样seoul是什么意思中文
  • 嘉定网站设计制作价格哪个平台可以免费打广告
  • 网站开发需要的人员营销网络推广方式有哪些
  • 专做logo网站叫什么地方seo页面优化的方法
  • 网页制作基础教程我的足球网seo网站推广企业
  • 公司vi设计内容seo网络推广排名
  • 住房建设网站酒店营销策划与运营
  • 微网站怎么做微名片沈阳网站关键词优化多少钱
  • wordpress foopen温州seo按天扣费
  • 郑州有官方网站的公司徐州seo外包公司
  • 知名的集团门户网站建设企业优秀的软文广告案例
  • 网站上传页面yoast seo
  • 政府门户网站建设管理工作平台推广是什么
  • 网站重新解析360优化大师下载官网
  • 创建qq网站吗百度一下网页首页
  • wordpress自己新建模板绍兴seo网站管理
  • 大连凯杰建设有限公司官方网站营销方案案例
  • 郑州低价网站制作百度竞价搜索
  • 平面设计师的前景和收入seo翻译
  • 自己做网站代理产品seo品牌
  • 创建网站免费注册广州网络营销运营
  • 网站首页栏目设置抖音搜索关键词推广
  • 付运费送东西的网站怎么做专业网站推广软件
  • 网站正在建设中 源码广东近期新闻
  • app网站建设手机APP软件开发2022年最火的关键词