大模型镜像打包实战:CodeGeeX2为例

2024-01-22 18:52

本文主要是介绍大模型镜像打包实战:CodeGeeX2为例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

资源地址

docker torch镜像地址
CodeGeeX2 github

构建思路

查看CodeGeeX2项目,官方已经提供好启动脚本,配置好各种依赖应该就可以运行。

python ./demo/run_demo.pyusage: run_demo.py [-h] [--model-path MODEL_PATH] [--example-path EXAMPLE_PATH] [--quantize QUANTIZE][--chatglm-cpp] [--fastllm] [--n-gpus N_GPUS] [--gpu GPU] [--cpu] [--auth] [--username yourname][--password yourpassword][--port PORT] [--listen ADDRESS]# 若要启用身份验证,请先启用--auth,然后定义--username与--password,如:
python run_demo.py --auth --username user --password password  # 若要监听所有地址请指定 --listen 0.0.0.0

镜像Dockerfile

写一个启动脚本bin/start.sh,判断是否启用身份验证,也可以在Dockerfile最后的CMD直接执行python脚本,sh bin/start.sh这样写更标准。

#!/usr/bin/env bashif [[ $USERNAME != "" ]] && [[ $PASSWORD != "" ]]
thenpython /workspace/CodeGeeX2/demo/run_demo.py \--listen $LISTEN --port $PORT \--model-path $MODEL_PATH  \--gpu $GPU \--n-gpus $N_GPUS \$CHATGLM \--auth \--username $USERNAME \--password $PASSWORD
elsepython /workspace/CodeGeeX2/demo/run_demo.py \--listen $LISTEN --port $PORT \--model-path $MODEL_PATH  \--gpu $GPU \--n-gpus $N_GPUS \$CHATGLM
fi
FROM pytorch/pytorch:2.1.2-cuda11.8-cudnn8-runtimeRUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \&& pip install fire zmq sentencepiece gradio accelerate transformers==4.33.2 modelscope chatglm-cpp cpm_kernels tabulate \&& mkdir /workspace \&& cd /workspace# 网好的同学直接拉远程的项目
# RUN git clone https://github.com/THUDM/CodeGeeX2.git# 网不好可以先拉倒本地,然后用下面目录copy到指定路径
COPY CodeGeeX2 /workspace/CodeGeeX2/
# 原项目使用huggingface模型,此处使用的是国内modelscope仓库,代码中transformers的导包都需要改为modelscope,也可以上huggingface上拉倒本地,改成本地路径
COPY modelscope /root/.cache/modelscope/ENV LISTEN=0.0.0.0
ENV PORT=7860
ENV MODEL_PATH=ZhipuAI/codegeex2-6b
ENV GPU=0
ENV N_GPUS=1
ENV CHATGLM=--chatglm-cpp
CMD sh /workspace/CodeGeeX2/bin/start.sh

执行命令构建镜像:docker build -t codegeex:v1 .
命令执行通过后查看此镜像ID,执行下面命令:
docker run -d --runtime=nvidia -p 7860:7860 --name pytorch2.0 -v /tmp:/tmp 镜像ID
访问localhost:7860查看是否成功

bug解决方案

如果有我未遇到的bug欢迎提问,一起解决问题总结在此处

  • NameError: name 'round_up' is not defined
    当指定 --quantize 4 时出现,File "/root/.cache/huggingface/modules/transformers_modules/codegeex2-6b/quantization.py", line 78, in compress_int4_weight可以看到这个python是在拉模型权重中的一个文件,名字就知道是做量化的代码,from cpm_kernels.kernels.base import LazyKernelCModule, KernelFunction, round_up,进入文件后找到导入的语句,显然应该是缺少cpm_kernels包或者包版本不一致没有round_up函数,pip install cpm_kernels适合的版本即可。或者直接使用官方已经提供好的量化模型,就可以不做--quantize 4指定。

这篇关于大模型镜像打包实战:CodeGeeX2为例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/633923

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.