使用 Docker 容器运行源神开源的 Grok-1 🤔

34 天前
 mayooot

最近工作中让我尝试跑一跑马斯克开源的 Grok-1 ,正好自己业务时间也在看这个,但是跑的过程中大部分都是依赖、环境相关的问题,而且在 Github 的 issue/discussions 里都没找到怎么用 Docker 运行或者提供一个基础环境的镜像。

所以我打算献丑一下,给大家提供一个镜像,在我们的环境里是可以正常运行的,但是一批服务器都大差不差,所以在别的环境运行起来可能有错误,大家有空测试的话,欢迎来讨论讨论。

下面就是 README 的内容了,如果对你有帮助,请点一个 Star⭐(最近打算看看新的工作机会,Star 多一点面试就能吹牛逼了😄)


概述

最近源神开源了 Grok-1 大模型,想着跑起来看看是什么样子。Grok 的 GitHub 里写的非常清楚了,首先 clone 代码,然后下载模型(大概 300 个 G ),然后执行:

pip install -r requirements.txt
python run.py

听起来很简单,就像把大象塞进冰箱需要几步一样。但是实际上模型要依赖 jax 、jaxlib ,这俩对环境要求还是比较苛刻的,所以尝试在服务器上运行了一下,各种报错,无奈只能使用容器一个个环境的尝试,最后成功构建出一个可以运行的镜像(下面会展示宿主机和容器的环境)。这个镜像是适用于我们的环境的,在别的环境下不知道能否正常运行,所以欢迎你使用后给出一点反馈。

我做了什么

首先模型文件非常大,不适合每次都 docker cp 进基础环境的容器中,而且如果这个容器经过调试后可用,那么 commit 时也会把模型顺带着保存,那么这个镜像的体积可就太大了。所以模型文件,使用 -v 挂载进容器的 /root 下。

而代码比较小,大概 900MB ,调试中免不了要修改一些代码,并且这些是希望调试好后直接保存进容器的,所以我将程序代码通过 docker cp 复制到了容器里,并且提交的镜像里也有,方便你直接使用。

然后就是安装各种环境,遇到一个报错解决一个。

GitHub

项目地址: https://github.com/mayooot/grok-docker

欢迎 ✨

快速启动

首先拉取镜像,大概 8 个 G 。

docker pull mayooot/grok-docker:v1

然后要将下载的模型文件 ckpt-0 目录挂载进容器,下载教程可以参考这篇文章:Grok-1 本地部署过程

最后启动容器。

  • 注意要将 $your-dir/ckpt-0 替换成你的实际模型地址。
  • 共享内存设置为了 600g ,应该是够用的,如果不够,请自行调整。
  • 要跑起来模型大概需要 8 张 A800/A100 。所以这里使用 --gpus all 将所有 gpu 挂载进去。
docker run -d -it \
--network=host \
--shm-size 600g \
--name=grok-docker \
--gpus all \
-v $your-dir/ckpt-0:/root/ckpt-0 \
mayooot/grok-docker:v1

训练

程序代码已经存在于容器中,并且修改了模型的加载路径,所以只要你正确的把 ckpt-0 挂载进容器,那么直接执行下面代码,然后等待结果。

docker exec -it grok-docker bash
cd /root/grok-1/
python run.py

运行结果:

环境

宿主机环境

容器环境

$ cat /etc/issue
Ubuntu 22.04.1 LTS \n \l

$ python --version
Python 3.10.8

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

$ pip show jax
Name: jax
Version: 0.4.26
Summary: Differentiate, compile, and transform Numpy code.
Home-page: https://github.com/google/jax
Author: JAX team
Author-email: jax-dev@google.com
License: Apache-2.0
Location: /root/miniconda3/lib/python3.10/site-packages
Requires: ml-dtypes, numpy, opt-einsum, scipy
Required-by: chex, flax, optax, orbax-checkpoint

$ pip show jaxlib
Name: jaxlib
Version: 0.4.26+cuda12.cudnn89
Summary: XLA library for JAX
Home-page: https://github.com/google/jax
Author: JAX team
Author-email: jax-dev@google.com
License: Apache-2.0
Location: /root/miniconda3/lib/python3.10/site-packages
Requires: ml-dtypes, numpy, scipy
Required-by: chex, optax, orbax-checkpoint
2540 次点击
所在节点    程序员
18 条回复
crackidz
34 天前
其他的不说,你这个配置很可...

如果 GGUF 格式的话,直接 llama.cpp 之类的直接跑吧
yinmin
33 天前
这台电脑要 7 位数吧
mightybruce
33 天前
这是炫富贴,好吧,大家都知道你有钱了。
mayooot
33 天前
@mightybruce 炫富啥啊.... 都是拿公司提供的服务器跑,或者去国家超算中心租用机器
t41372
33 天前
这... 不能用 ollama 跑吗?
weak
33 天前
我差的是镜像吗 我差的是几百万的 gpu
kneo
33 天前
这模型效果怎么样?不咋滴就没必要浪费时间了。折腾这玩意真是既无聊又学不到什么东西。
yazinnnn0
33 天前
GPU: 8 * NVIDIA A100 80GB

告辞
julyclyde
33 天前
“各种报错”你都不说具体是啥错
就开始说自己做了哪些工作
那你这些工作的意义在哪里呢?
mayooot
33 天前
@julyclyde 意义就在如果你想跑起来这个模型不需要处理复杂的环境了,关于报错信息,你自己把模型 download 下来跑跑不就知道了吗,难道你用的每个 docker 容器,作者都会告诉你他做了什么?
mayooot
33 天前
@kneo 模型跑起来之后需要改改 py 代码,才能和 chatgpt 那样连续对话。关于效果,我只能说比较适合企业套皮...
snylonue
32 天前
感觉不错,当时搞 sd 配环境折腾了挺久的
firefox12
31 天前
新人完全不懂,假设我有一台电脑,然后跑你来你的 docker 镜像,然后 我怎么样使用这个应用呢? 比如我启动了一个 nginx 我能用浏览器访问它, 我启动一个数据库 我能用数据库客户端存储数据。 这个大模型启动以后,我怎么和他交互,它提供什么服务给我们呢?
mayooot
31 天前
@firefox12 你可以理解为一个对话模型和 chatgpt 差不多,你问一个问题它回答你。比如默认是在黑框框(命令行模式)里问问题/回答,如果它有 API ,就能写个 WEB 页面,然后你再浏览器上就能和它对话了,这时候就和 chatgpt 更像了。

不过它和数据库不一样的是,需要的资源要比我们的电脑大的多,就得需要专业的服务器来跑模型了。但是把模型下载到服务器上,然后跑起来,它肯定要依赖环境的,而服务器大部分情况下之前就已经被用过了,比如说 Python 版本是 3 .8 ,但是不凑巧的是这个模型还需要 3.10 ,所以选择用 Docker 容器来打包它的运行时环境(里面有 Python 3.10 )。

不知道这样解释能否明白一点。
firefox12
29 天前
@mayooot 所有它有 api 吗? 比如一个纯新的机器把几十 G 的数据复制过来,然后把 docker 运行起来,理论上是不是 我可以调它的 api 传一些文字给他,它就返回一些文字给我? 大概就这样? 它还是否需要做联网获取信息这样的操作 ?

关于 api 有没有什么文档之类的介绍一下?
mayooot
29 天前
@firefox12 GitHub 上已经有封装好的 web 页面,看一下这个帖子,快速启动里的-grok 本地部署那篇文章,里面有讲的。
不需要联网。
xiaozhang1997
22 天前
我觉得作者封的轮子很有价值啊,楼上几个不知道在针对什么,不感兴趣就划出去呗,居然还能质问作者为什么不把报错贴出来,我大学的时候都不会这么问别人
mayooot
22 天前
@xiaozhang1997 谢谢哥们理解,我也没想到有人认为我在炫富,我就一个底层小牛马,给公司跑跑模型。
在 Github 上这个项目还是能帮到一些人的(虽然老外比较多),这样就足够了,😊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1032081

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX