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