日本电影一区二区_日本va欧美va精品发布_日本黄h兄妹h动漫一区二区三区_日本欧美黄色

Tinygrad – 不到1000行代碼實現(xiàn)的深度學(xué)習(xí)框架

Tinygrad - 不到1000行代碼實現(xiàn)的深度學(xué)習(xí)框架

推薦:用 NSDT設(shè)計器 快速搭建可編程3D場景。

顯然,Tinygrad似乎只是另一個深度學(xué)習(xí)框架。 嗯,不完全是。 它要比Pytorch更小和更簡單幾個數(shù)量級。 每個曾經(jīng)嘗試閱讀 PyTorch 或 TensorFlow 底層源代碼的人都會對此表示贊賞。 它無疑保證了添加更多加速器的門檻足夠低。

由于tinygrad極其簡單,它的目標(biāo)是成為添加新加速器的最簡單的框架,并支持推理和訓(xùn)練。

這個名字從何而來?

tinygrad 將始終低于 1000 行。 如果不是,我們將恢復(fù)提交,直到tinygrad變得更小。

我認(rèn)為這有點過于雄心勃勃,除非你將其分成各種包來添加各種支持,例如各種加速器、模型結(jié)構(gòu)、配置文件和加載器等等。 但是,是的,這聽起來確實很有趣。

加速的內(nèi)容已經(jīng)移入 Accel。

1、tinygrad代碼結(jié)構(gòu)

pyreverse --filter-mode ALL --colorized --max-color-depth 7 --output webp ./tinygrad/

輸出以下代碼結(jié)構(gòu):

Tinygrad - 不到1000行代碼實現(xiàn)的深度學(xué)習(xí)框架Tinygrad - 不到1000行代碼實現(xiàn)的深度學(xué)習(xí)框架

2、加速器的使用

  • GPU

NVIDIACUDA 無疑在神經(jīng)網(wǎng)絡(luò)訓(xùn)練領(lǐng)域占據(jù)主導(dǎo)地位。 因此,看到加速器支持使用 OpenCL 是一個很好的改變。 那么,這真的是 GPU 特定的嗎? 不,某些 CPU 也支持 OpenCL 的某些子集(例如通過 pocl)。 使用 OpenCL 的有趣之處在于支持完全不同的硬件來加速訓(xùn)練或推理,例如 FPGA。 如果我沒記錯的話,英特爾的一些 FPGA 可以使用 OpenCL 進(jìn)行編程。 然而,我不確定 JIT 編譯的 PyOpenCL 內(nèi)核如何容易地轉(zhuǎn)換為編程的輸入,例如 FPGA(如果它們不提供任何 OpenCL 功能)。

然而,似乎添加了通過 PyCUDA 的 CUDA 支持,但尚未集成。

  • ANE(蘋果神經(jīng)引擎)

張量類似乎支持一些 ANE 操作。 他們似乎正在構(gòu)建自己的 ANE 抽象層,以利用 ANE 進(jìn)行培訓(xùn)。

3、tinygrad上手試用

注意! 如果我們在 conda 環(huán)境中使用tinygrad,那么我們必須安裝 OpenCL 實現(xiàn)(例如 pocl)

conda install -c conda-forge pocl pyopencl clinfo

clinfo 對于列出可用的 OpenCL 設(shè)備很有用,但它需要安裝在 conda 環(huán)境中。

如果我們使用標(biāo)準(zhǔn)示例,我們可以看到有 CPUBuffer 和 GPUBuffer:

from tinygrad.tensor import Tensor(Tensor.ones(5000,5000).gpu() Tensor.ones(5000,5000).gpu()).cpu()

輸出如下:

<Tensor CPUBuffer([[2., 2., 2., ..., 2., 2., 2.], [2., 2., 2., ..., 2., 2., 2.], [2., 2., 2., ..., 2., 2., 2.], ..., [2., 2., 2., ..., 2., 2., 2.], [2., 2., 2., ..., 2., 2., 2.], [2., 2., 2., ..., 2., 2., 2.]], dtype=float32) with grad None>

然而:

from tinygrad.tensor import TensorTensor.ones(5000,5000).gpu() Tensor.ones(5000,5000).gpu())

輸出:

<Tensor <GPUBuffer with shape (5000, 5000)> with grad None>

如果導(dǎo)出 PYOPENCL_COMPILER_OUTPUT=1,PyOpenCL 將顯示編譯器警告:

CompilerWarning: Built kernel retrieved from cache. Original from-source build had warnings:Build on <pyopencl.Device 'Intel(R) Iris(R) Xe Graphics [0x9a49]' on 'Intel(R) OpenCL HD Graphics' at 0x562deb03ccb0> succeeded, but said:1:1:112: warning: double precision constant requires cl_khr_fp64, casting to single precisioninline float get_A(__global const float *x, int gid) { int valid = 1; int idx = gid; ; return valid ? x[idx] : 0.0;} ^1:2:112: warning: double precision constant requires cl_khr_fp64, casting to single precisioninline float get_B(__global const float *x, int gid) { int valid = 1; int idx = gid; ; return valid ? x[idx] : 0.0;}inline float _ewop(int gid,float acc,__global const float *A_g,__global const float *B_g) {float A = get_A(A_g, gid); ^1:4:19: warning: double precision constant requires cl_khr_fp64, casting to single precision float acc = 0.0; ^ warn(text, CompilerWarning)

這是一個快速 DNN 推理示例:

ipython3 examples/efficientnet.py https://media.istockphoto.com/photos/hen-picture-id831791190

看來 export GPU=1 終于可以體驗到一些加速了。

使用 Intel i7-1165G7 的結(jié)果:

8 8.045593 hendid inference in 1.10 s

使用 GPU 加速:

8 8.0455885 hendid inference in 0.31 s

4、結(jié)束語

Tinygrad 確實還不夠成熟。 然而,我想最好讓每個人自己來決定tinygrad是一個笑話還是在一個過于復(fù)雜的深度學(xué)習(xí)框架的世界中迫切需要的東西。


原文鏈接:http://www.bimant.com/blog/tinygrad-dl-framework/

相關(guān)新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部
丽江市| 延安市| 三台县| 新宾| 江都市| 宁陕县| 绿春县| 冀州市| 祥云县| 盘锦市| 泉州市| 鱼台县| 张家口市| 五大连池市| 湖口县| 来宾市| 镇康县| 招远市| 长沙县| 新兴县| 濮阳市| 东至县| 淮南市| 登封市| 饶河县| 鹿泉市| 昭苏县| 个旧市| 扶余县| 二手房| 静宁县| 三台县| 隆尧县| 昭苏县| 永泰县| 华宁县| 临高县| 阜新市| 娄底市| 福建省| 雅江县|