
最近工作中让我尝试跑一跑马斯克开源的 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 复制到了容器里,并且提交的镜像里也有,方便你直接使用。
然后就是安装各种环境,遇到一个报错解决一个。
项目地址: 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: [email protected] 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: [email protected] License: Apache-2.0 Location: /root/miniconda3/lib/python3.10/site-packages Requires: ml-dtypes, numpy, scipy Required-by: chex, optax, orbax-checkpoint 1 crackidz 2024 年 4 月 12 日 其他的不说,你这个配置很可... 如果 GGUF 格式的话,直接 llama.cpp 之类的直接跑吧 |
2 yinmin 2024 年 4 月 12 日 via iPhone 这台电脑要 7 位数吧 |
3 mightybruce 2024 年 4 月 12 日 这是炫富贴,好吧,大家都知道你有钱了。 |
4 mayooot OP @mightybruce 炫富啥啊.... 都是拿公司提供的服务器跑,或者去国家超算中心租用机器 |
5 t41372 2024 年 4 月 13 日 via Android 这... 不能用 ollama 跑吗? |
6 weak 2024 年 4 月 13 日 via iPhone 我差的是镜像吗 我差的是几百万的 gpu |
7 kneo 2024 年 4 月 13 日 via Android 这模型效果怎么样?不咋滴就没必要浪费时间了。折腾这玩意真是既无聊又学不到什么东西。 |
8 yazinnnn0 2024 年 4 月 13 日 GPU: 8 * NVIDIA A100 80GB 告辞 |
9 julyclyde 2024 年 4 月 13 日 “各种报错”你都不说具体是啥错 就开始说自己做了哪些工作 那你这些工作的意义在哪里呢? |
10 mayooot OP @julyclyde 意义就在如果你想跑起来这个模型不需要处理复杂的环境了,关于报错信息,你自己把模型 download 下来跑跑不就知道了吗,难道你用的每个 docker 容器,作者都会告诉你他做了什么? |
12 snylonue 2024 年 4 月 14 日 感觉不错,当时搞 sd 配环境折腾了挺久的 |
13 firefox12 2024 年 4 月 15 日 新人完全不懂,假设我有一台电脑,然后跑你来你的 docker 镜像,然后 我怎么样使用这个应用呢? 比如我启动了一个 nginx 我能用浏览器访问它, 我启动一个数据库 我能用数据库客户端存储数据。 这个大模型启动以后,我怎么和他交互,它提供什么服务给我们呢? |
14 mayooot OP @firefox12 你可以理解为一个对话模型和 chatgpt 差不多,你问一个问题它回答你。比如默认是在黑框框(命令行模式)里问问题/回答,如果它有 API ,就能写个 WEB 页面,然后你再浏览器上就能和它对话了,这时候就和 chatgpt 更像了。 不过它和数据库不一样的是,需要的资源要比我们的电脑大的多,就得需要专业的服务器来跑模型了。但是把模型下载到服务器上,然后跑起来,它肯定要依赖环境的,而服务器大部分情况下之前就已经被用过了,比如说 Python 版本是 3 .8 ,但是不凑巧的是这个模型还需要 3.10 ,所以选择用 Docker 容器来打包它的运行时环境(里面有 Python 3.10 )。 不知道这样解释能否明白一点。 |
15 firefox12 2024 年 4 月 17 日 @mayooot 所有它有 api 吗? 比如一个纯新的机器把几十 G 的数据复制过来,然后把 docker 运行起来,理论上是不是 我可以调它的 api 传一些文字给他,它就返回一些文字给我? 大概就这样? 它还是否需要做联网获取信息这样的操作 ? 关于 api 有没有什么文档之类的介绍一下? |
16 mayooot OP @firefox12 GitHub 上已经有封装好的 web 页面,看一下这个帖子,快速启动里的-grok 本地部署那篇文章,里面有讲的。 不需要联网。 |
17 xiaozhang1997 2024 年 4 月 24 日 我觉得作者封的轮子很有价值啊,楼上几个不知道在针对什么,不感兴趣就划出去呗,居然还能质问作者为什么不把报错贴出来,我大学的时候都不会这么问别人 |
18 mayooot OP @xiaozhang1997 谢谢哥们理解,我也没想到有人认为我在炫富,我就一个底层小牛马,给公司跑跑模型。 在 Github 上这个项目还是能帮到一些人的(虽然老外比较多),这样就足够了, |