介绍

我想在 GPU 上运行 Elixir 的 Nx

如果你在 GPU 上运行 Nx,你应该能够流畅地运行 AI 模型

但是我没有GPU,我没有钱……

向此类人推荐 Google Colaboratory。

从浏览器运行代码并查看结果

是最好的服务,基本可以免费使用,最多可以用到GPU和TPU

呵呵,不是 Python 的吗?

是的,Google Colaboratory 是一项允许您在云端使用 Python 的 Jupyter Notebook 的服务

不过其实Elixir Livebook也可以执行

这是我实现的笔记本(*包括 Evision 的设置)

参考文章

准备

您将需要两个帐户:

  • 谷歌账户
  • ngrok 帐户

ngrok 是一种服务,允许您将本地启动的 Web 服务暴露给外界

例如本地http://localhost:8080https://xxxx-12-34-567-890.ngrok.io它允许您使用类似的 URL 从外部临时访问

(那些已经弄清楚该怎么做的人会注意到)

登录ngrok后,在左侧菜单中打开“Your Authtoken”,
请提供您的身份验证令牌

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

在 Google Colaboratory 上安装 Elixir

在 Google Colaboratory 中点击“创建新笔记本”

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

如下图所示的屏幕将打开

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

我想使用 GPU,所以我更改了运行时

从顶部菜单的“运行时”中单击“更改运行时类型”

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

在打开的模式中选择“GPU”并单击“保存”

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

将以下代码粘贴到播放标记右侧的输入区(单元格)中

!echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections

单击播放按钮(= 运行单元格中的代码),一段时间后,您将在左侧看到一个绿色复选标记

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

您可以在 Jupyter Notebook 中通过在它们前面加上 ! 来运行 shell 命令

使用它,Elixir 被安装在 Google Colaboratory 的容器上。

如果您将鼠标光标移动到前一个单元格的底部,将出现一个名为“+代码”的按钮,因此单击此

(您也可以使用上面显示的“+代码”按钮)

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

然后,下面会添加一个单元格,所以请粘贴以下代码并执行新的单元格

使用apt-get 安装所需的库

!wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb && sudo dpkg -i erlang-solutions_2.0_all.deb

!sudo apt-get update -y

!sudo apt-get install -y erlang-base
!sudo apt-get install -y build-essential
!sudo apt-get install -y erlang-dev
!sudo apt-get install -y erlang-parsetools
!sudo apt-get install -y erlang-os-mon
!sudo apt-get install -y erlang-xmerl
!sudo apt-get install -y elixir

还要添加一个单元格并运行以下代码来安装 Livebook

!mix local.hex --force
!mix local.rebar --force
!mix escript.install hex livebook 0.6.3 --force

由于apt安装的Elixir(1.13)当前版本无法安装最新的Livebook(0.7),
Livebook 版本指定 0.6.3

您将收到如下所示的警告消息,但不要担心,因为它很好(因为它以绝对路径开头)

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

安装 ngrok 客户端工具

!curl -O https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

使用以下代码设置准备好的 ngrok 身份验证令牌

* 将<ngrokの認証トークン> 替换为您的ngrok 帐户颁发的身份验证令牌

!./ngrok authtoken <ngrokの認証トークン>

运行以下代码,用 ngrok 暴露容器内的http://localhost:8888

get_ipython().system_raw('./ngrok http 8888 &')
!sleep 5s

运行以下代码查看发布的网址

(如果您在此处收到错误,则您的 ngrok 身份验证令牌是错误的)

!curl -s http://localhost:4040/api/tunnels | python3 -c "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

运行以下代码在端口 8888 上启动 Livebook

!XLA_TARGET=cuda111 EXLA_TARGET=cuda LIBTORCH_TARGET=cu113 /root/.mix/escripts/livebook server --port 8888 --no-token

每个环境变量都是为 GPU 编译的规范

  • EXLA:XLA_TARGET=cuda111 EXLA_TARGET=cuda
  • Torchx:LIBTORCH_TARGET=cu113

如果还想包含 Evision,请指定以下环境变量

  • 设想:EVISION_PREFER_PRECOMPILED=false

如果一切顺利,您将看到 Livebook 已启动,并且单元将继续运行

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

在这种状态下打开 ngrok 的外部公共 URL

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

是的,Livebook 已打开

运行 Nx

点击右上角的“新建笔记本”打开一个新笔记本

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

将下面的代码粘贴到Notebook dependencies and setup 单元格中并运行它

Mix.install([
  {:nx, "~> 0.4"},
  {:exla, "~> 0.4"},
  {:torchx, "~> 0.4"}
])

这需要一段时间,但将为您的 GPU 安装 Nx、EXLA 和 Torchx

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

让我们运行以下代码

tensor = Nx.tensor([1, 2, 3], type: {:f, 64}, backend: {Nx.BinaryBackend, device: :gpu})
Nx.add(tensor, tensor)

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

二进制后端工作正常

接下来是EXLA

tensor = Nx.tensor([1, 2, 3], type: {:f, 64}, backend: {EXLA.Backend, device: :gpu})
Nx.add(tensor, tensor)

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

你可以看到它在CUDA中运行

最后 Torchx

tensor = Nx.tensor([1, 2, 3], type: {:f, 64}, backend: Torchx.Backend)
Nx.add(tensor, tensor)

Google Colaboratory 上で Elixir Livebook を動かす(GPUを無料で使う)

仅第一次执行大约需要 3 分钟,但它可以安全地与 CUDA 一起使用

综上所述

我可以用这个做 annakoto 和 konnakoto


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308631556.html

相关文章: