V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
mayooot
V2EX  ›  程序员

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

  •  
  •   mayooot · 2024-04-12 22:18:04 +08:00 · 3545 次点击
    这是一个创建于 489 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近工作中让我尝试跑一跑马斯克开源的 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
    

    运行结果:

    result

    环境

    宿主机环境

    • OS: Ubuntu 20.04.4
    • Physical Storage: 1TB
    • Physical Memory: 2TB
    • GPU: 8 * NVIDIA A100 80GB
    • Docker: 24.0.5
    • Nvidia Driver: 525.85.12

    容器环境

    $ 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 条附言  ·  2024-04-13 00:01:54 +08:00
    为什么大家都关心机器多少钱,还有认为我是炫富的😅。

    Grok 应该是目前开源里质量比较高的吧,模型文件 300 个 G ,.git 差不多也是 200 多个,跑起来差不多需要 8 张 A800 ,在讨论群里大家也都是这样子跑的。

    其次算力 GPU 都是可以网上租的,按小时计费: https://www.scnet.cn/ui/mall/search/goods?keyword=A800

    Grok 仓库的 issue 也有很多是运行的错误,大部分都和基础环境有关,所以我才想着弄一个容器,为社区贡献点绵薄之力....
    18 条回复    2024-04-24 14:04:38 +08:00
    crackidz
        1
    crackidz  
       2024-04-12 22:48:52 +08:00
    其他的不说,你这个配置很可...

    如果 GGUF 格式的话,直接 llama.cpp 之类的直接跑吧
    yinmin
        2
    yinmin  
       2024-04-12 23:03:49 +08:00 via iPhone
    这台电脑要 7 位数吧
    mightybruce
        3
    mightybruce  
       2024-04-12 23:05:44 +08:00
    这是炫富贴,好吧,大家都知道你有钱了。
    mayooot
        4
    mayooot  
    OP
       2024-04-12 23:45:32 +08:00
    @mightybruce 炫富啥啊.... 都是拿公司提供的服务器跑,或者去国家超算中心租用机器
    t41372
        5
    t41372  
       2024-04-13 00:39:09 +08:00 via Android
    这... 不能用 ollama 跑吗?
    weak
        6
    weak  
       2024-04-13 05:36:18 +08:00 via iPhone
    我差的是镜像吗 我差的是几百万的 gpu
    kneo
        7
    kneo  
       2024-04-13 09:49:11 +08:00 via Android
    这模型效果怎么样?不咋滴就没必要浪费时间了。折腾这玩意真是既无聊又学不到什么东西。
    yazinnnn0
        8
    yazinnnn0  
       2024-04-13 09:53:53 +08:00
    GPU: 8 * NVIDIA A100 80GB

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

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

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

    关于 api 有没有什么文档之类的介绍一下?
    mayooot
        16
    mayooot  
    OP
       2024-04-17 12:12:25 +08:00
    @firefox12 GitHub 上已经有封装好的 web 页面,看一下这个帖子,快速启动里的-grok 本地部署那篇文章,里面有讲的。
    不需要联网。
    xiaozhang1997
        17
    xiaozhang1997  
       2024-04-24 12:32:34 +08:00
    我觉得作者封的轮子很有价值啊,楼上几个不知道在针对什么,不感兴趣就划出去呗,居然还能质问作者为什么不把报错贴出来,我大学的时候都不会这么问别人
    mayooot
        18
    mayooot  
    OP
       2024-04-24 14:04:38 +08:00
    @xiaozhang1997 谢谢哥们理解,我也没想到有人认为我在炫富,我就一个底层小牛马,给公司跑跑模型。
    在 Github 上这个项目还是能帮到一些人的(虽然老外比较多),这样就足够了,😊
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1022 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:45 · PVG 06:45 · LAX 15:45 · JFK 18:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.