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

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

  •  
  •   mayooot · 257 天前 · 2997 次点击
    这是一个创建于 257 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近工作中让我尝试跑一跑马斯克开源的 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 条附言  ·  257 天前
    为什么大家都关心机器多少钱,还有认为我是炫富的😅。

    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  
       257 天前
    其他的不说,你这个配置很可...

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

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

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

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

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