介绍
我想在 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:8080的https://xxxx-12-34-567-890.ngrok.io它允许您使用类似的 URL 从外部临时访问
(那些已经弄清楚该怎么做的人会注意到)
登录ngrok后,在左侧菜单中打开“Your Authtoken”,
请提供您的身份验证令牌
在 Google Colaboratory 上安装 Elixir
在 Google Colaboratory 中点击“创建新笔记本”
如下图所示的屏幕将打开
我想使用 GPU,所以我更改了运行时
从顶部菜单的“运行时”中单击“更改运行时类型”
在打开的模式中选择“GPU”并单击“保存”
将以下代码粘贴到播放标记右侧的输入区(单元格)中
!echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections
单击播放按钮(= 运行单元格中的代码),一段时间后,您将在左侧看到一个绿色复选标记
您可以在 Jupyter Notebook 中通过在它们前面加上 ! 来运行 shell 命令
使用它,Elixir 被安装在 Google Colaboratory 的容器上。
如果您将鼠标光标移动到前一个单元格的底部,将出现一个名为“+代码”的按钮,因此单击此
(您也可以使用上面显示的“+代码”按钮)
然后,下面会添加一个单元格,所以请粘贴以下代码并执行新的单元格
使用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
您将收到如下所示的警告消息,但不要担心,因为它很好(因为它以绝对路径开头)
安装 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'])"
运行以下代码在端口 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 已启动,并且单元将继续运行
在这种状态下打开 ngrok 的外部公共 URL
是的,Livebook 已打开
运行 Nx
点击右上角的“新建笔记本”打开一个新笔记本
将下面的代码粘贴到Notebook dependencies and setup 单元格中并运行它
Mix.install([
{:nx, "~> 0.4"},
{:exla, "~> 0.4"},
{:torchx, "~> 0.4"}
])
这需要一段时间,但将为您的 GPU 安装 Nx、EXLA 和 Torchx
让我们运行以下代码
tensor = Nx.tensor([1, 2, 3], type: {:f, 64}, backend: {Nx.BinaryBackend, device: :gpu})
Nx.add(tensor, tensor)
二进制后端工作正常
接下来是EXLA
tensor = Nx.tensor([1, 2, 3], type: {:f, 64}, backend: {EXLA.Backend, device: :gpu})
Nx.add(tensor, tensor)
你可以看到它在CUDA中运行
最后 Torchx
tensor = Nx.tensor([1, 2, 3], type: {:f, 64}, backend: Torchx.Backend)
Nx.add(tensor, tensor)
仅第一次执行大约需要 3 分钟,但它可以安全地与 CUDA 一起使用
综上所述
我可以用这个做 annakoto 和 konnakoto
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308631556.html