Ivy 开源,深度学习大一统时代到来?

喜欢就关注 AIZOO吧!

它来了,它带着统一主流深度学习框架的接口来了。最近,有一个开源的框架:IVY,它将几个主流的深度学习框架都做了一个统一的封装,包括 PyTorch、TensorFlow、MXNet、Jax 和 Numpy。下面来大致看一下这个框架吧。

Ivy 开源,深度学习大一统时代到来?

近两年来,学术界和工业界一直在争论 PyTorch 和 TensorFlow 哪一个才是最好用的深度学习框架。除了这两个框架,谷歌出品的 Jax 也有起势的样子,还有亚马逊的 MXNet,都还在发展。PyTorch 在学术界最火,TensorFlow 工程上部署的较多,可谓各有千秋。所以,就有开源作者想把各种主流的框架统一做了封装,于是就有了 Ivy。

Ivy 开源,深度学习大一统时代到来?

代码地址: https://github.com/unifyai/ivy

先看看 IVY 官方是怎么定义的吧。

Ivy is a unified machine learning framework which maximizes the portability of machine learning codebases. Ivy wraps the functional APIs of existing frameworks. Framework-agnostic functions, libraries and layers can then be written using Ivy, with simultaneous support for all frameworks. Ivy currently supports Jax, TensorFlow, PyTorch, MXNet and Numpy.

Ivy 开源,深度学习大一统时代到来?

翻译出来就是:

Ivy 是一个统一的机器学习框架,可最大限度地提高机器学习代码库的可移植性。Ivy 封装了现有框架的功能 API。然后可以使用 Ivy 编写与框架无关的函数、库和层,它可以同时支持所有框架。Ivy 目前支持 Jax、TensorFlow、PyTorch、MXNet 和 Numpy。

目前官方已经发布了不少 Ivy 编写的派生库,包括力学、3D 视觉、机器人、增强学习、神经记忆、预训练模型以及实现,此外还有训练、数据加载的构建器工具等。

快速入门

我们可以直接 pip install ivy-core来安装,然后你可以使用你喜欢的框架来训练一个模型,下面是一个示例:

import ivy

class MyModel(ivy.Module):
    def __init__(self):
        self.linear0 = ivy.Linear(3, 64)
        self.linear1 = ivy.Linear(64, 1)
        ivy.Module.__init__(self)

    def _forward(self, x):
        x = ivy.relu(self.linear0(x))
        return ivy.sigmoid(self.linear1(x))

ivy.set_framework('torch')  # change to any framework!

model = MyModel()
optimizer = ivy.Adam(1e-4)
x_in = ivy.array([1., 2., 3.])
target = ivy.array([0.])

def loss_fn(v):
    out = model(x_in, v=v)
    return ivy.reduce_mean((out - target)**2)[0]

for step in range(100):
    loss, grads = ivy.execute_with_gradients(loss_fn, model.v)
    model.v = optimizer.step(model.v, grads)
    print('step {} loss {}'.format(step, ivy.to_numpy(loss).item()))

print('Finished training!')

这个示例使用 PyTorch 作为后端框架,但后端可以轻松更改为你喜欢的框架,例如 TensorFlow、JAX 或 MXNet。

框架无关的函数

Ivy 的函数可以接受所有框架的 tensor,如下面的例子:

import jax.numpy as jnp
import tensorflow as tf
import numpy as np
import mxnet as mx
import torch

import ivy

jax_concatted = ivy.concatenate((jnp.ones((1,)), jnp.ones((1,))), -1)
tf_concatted = ivy.concatenate((tf.ones((1,)), tf.ones((1,))), -1)
np_concatted = ivy.concatenate((np.ones((1,)), np.ones((1,))), -1)
mx_concatted = ivy.concatenate((mx.nd.ones((1,)), mx.nd.ones((1,))), -1)
torch_concatted = ivy.concatenate((torch.ones((1,)), torch.ones((1,))), -1)

下面是 Ivy 支持的函数,可以看到,跟 Numpy、PyTorch、TensorFlow 的函数非常像

Ivy 开源,深度学习大一统时代到来?

统一所有框架的目的是什么?

[En]

What is the purpose of unifying all frameworks?

很多开发者都想用一个框架开发,那么 Ivy 有啥用呢?

当你想让代码可用性最强的时候,Ivy的威力就显现了。

当我们想写一些代码,然后让社区所有开发者都可以用,不管他们用的是啥框架,TF、PyTorch、MXNet、Jax,都没关系。例如一个简单的裁剪函数 ivy.clip,它很好的封装了其他框架的函数。

Ivy 开源,深度学习大一统时代到来?

就其本身而言,这似乎不是很有意思,在机器学习中还有比裁剪张量更有趣的事情。Ivy 可以构建更多有趣的应用。

Ivy 官方发布的力学、3D 视觉、机器人和可微分环境的代码库都是用纯 Ivy 编写的。这些库为任何机器学习框架的用户提供了各种应用功能的完全可区分的实现,随时可以集成到用户的代码中。

Ivy 的另一个好处是灵活性。通过保持 Ivy 抽象的轻量级,以及齐全的功能,这使您可以完全控制您的代码。下面的示意图强调您可以选择在任何抽象级别进行开发。

Ivy 开源,深度学习大一统时代到来?

你可以完全在 Ivy 中编写代码,或者在原生 DL 框架中使用少量 Ivy 代码。这完全取决于您需要从现有 Ivy 库中获得多少 Ivy 函数。

总得来说,Ivy 看着还挺有意思的。虽然我们当前可能用不上它,但是可以观察一下它的发展,说不准未来会有机会使用它,让我们静观其变吧~

Ivy 开源,深度学习大一统时代到来?

欢迎扫描下面的二维码添加助理微信,并邀请您加入我们的微信交流群。

[En]

Welcome to scan the QR code below to add assistant Wechat and invite you to join our Wechat communication group.

群里有多位 清北复交、BAT、AI独角兽大牛和众多深度学习er在一起愉快的交流技术,有任何问题,都可以咨询大家,欢迎你的加入哦。

Ivy 开源,深度学习大一统时代到来?

添加小助手微信,邀您进 AIZOO 技术交流群

我听说每个观看的人都很幸运。

[En]

I heard that everyone who is watching is very lucky.

Original: https://blog.csdn.net/u010900574/article/details/122803632
Author: u010900574
Title: Ivy 开源,深度学习大一统时代到来?

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/511332/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球