日韩高清亚洲日韩精品一区二区三区,成熟人妻av无码专区,国产又A又黄又潮娇喘视频,男女猛烈无遮挡免费视频在线观看

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

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

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

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

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

這個名字從何而來?

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

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

加速的內容已經移入 Accel。

1、tinygrad代碼結構

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

輸出以下代碼結構:

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

2、加速器的使用

  • GPU

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

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

  • ANE(蘋果神經引擎)

張量類似乎支持一些 ANE 操作。 他們似乎正在構建自己的 ANE 抽象層,以利用 ANE 進行培訓。

3、tinygrad上手試用

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

conda install -c conda-forge pocl pyopencl clinfo

clinfo 對于列出可用的 OpenCL 設備很有用,但它需要安裝在 conda 環(huá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>

如果導出 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 的結果:

8 8.045593 hendid inference in 1.10 s

使用 GPU 加速:

8 8.0455885 hendid inference in 0.31 s

4、結束語

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


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

相關新聞

聯(lián)系我們
聯(lián)系我們
公眾號
公眾號
在線咨詢
分享本頁
返回頂部