CodeGeeX2模型安装

简介

CodeGeeX2 是多语言代码生成模型 CodeGeeX (KDD’23) 的第二代模型。不同于一代 CodeGeeX(完全在国产华为昇腾芯片平台训练) ,CodeGeeX2 是基于 ChatGLM2 架构加入代码预训练实现,得益于 ChatGLM2 的更优性能,CodeGeeX2 在多项指标上取得性能提升(+107% > CodeGeeX;仅60亿参数即超过150亿参数的 StarCoder-15B 近10%)
官方仓库地址:https://github.com/THUDM/CodeGeeX2/tree/main

部署步骤

安装依赖
conda create --name CodeGeeX2 python=3.9
conda activate CodeGeeX2// #或者手动下载并上传至服务器
git clone git@github.com:THUDM/CodeGeeX2.git
cd CodeGeeX2
conda install -y pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.7 -c pytorch -c nvidia
# 一般来说,不需要安装这个,用显卡驱动自带的就行。
# conda install -y cuda-toolkit=11.7.0 -c nvidiapip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
下载模型数据

由于huggingface国内无法访问,我们使用镜像站下载

pip install -U huggingface_hub -i https://mirrors.aliyun.com/pypi/simple/
export HF_ENDPOINT=https://hf-mirror.com
# 下载THUDM/codegeex2-6b模型到本地目录:/mnt/data/CodeGeeX2/model
huggingface-cli download --resume-download --local-dir-use-symlinks False THUDM/codegeex2-6b --cache-dir /mnt/data/CodeGeeX2/model
启动

quick start - 单gpu

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True, cache_dir="/mnt/data/CodeGeeX2/model")
model = AutoModel.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True, device='cuda', cache_dir="/mnt/data/CodeGeeX2/model")
model = model.eval()# remember adding a language tag for better performance
prompt = "# language: Python\n# write a bubble sort function\n"
inputs = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_length=256, top_k=1)
response = tokenizer.decode(outputs[0])print(response)

quick start - 多gpu
demo.gpus为CodeGeeX2官方仓库的demo文件夹下的gps文件,需要修改num_gpus为机器实际的值,可以通过nvidia-smi -L查看GPU个数。

from transformers import AutoTokenizer, AutoModel
from demo.gpus import load_model_on_gpusdef get_model():tokenizer = AutoTokenizer.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True, cache_dir="/mnt/data/CodeGeeX2/model")# gpus文件在demo文件夹中model = load_model_on_gpus("THUDM/codegeex2-6b", num_gpus=4, cache_dir="/mnt/data/CodeGeeX2/model")model = model.eval()return tokenizer, modeltokenizer, model = get_model()# remember adding a language tag for better performance
prompt = "# language: Python\n# write a bubble sort function\n"
inputs = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_length=256, top_k=1)
response = tokenizer.decode(outputs[0])print(response)

quick start - http api

from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModel
from demo.gpus import load_model_on_gpus
import uvicorn, json, datetime
import argparse#获取选项        
def add_code_generation_args(parser):group = parser.add_argument_group(title="CodeGeeX2 DEMO")group.add_argument("--model-path",type=str,default="THUDM/codegeex2-6b",)group.add_argument("--listen",type=str,default="127.0.0.1",)group.add_argument("--port",type=int,default=7860,)group.add_argument("--workers",type=int,default=1,)group.add_argument(                      "--cpu",action="store_true",)group.add_argument(                      "--half",action="store_true",)group.add_argument("--quantize",type=int,default=None,)group.add_argument("--chatglm-cpp",action="store_true",)return parserLANGUAGE_TAG = {"Abap"         : "* language: Abap","ActionScript" : "// language: ActionScript","Ada"          : "-- language: Ada","Agda"         : "-- language: Agda","ANTLR"        : "// language: ANTLR","AppleScript"  : "-- language: AppleScript","Assembly"     : "; language: Assembly","Augeas"       : "// language: Augeas","AWK"          : "// language: AWK","Basic"        : "' language: Basic","C"            : "// language: C","C#"           : "// language: C#","C++"          : "// language: C++","CMake"        : "# language: CMake","Cobol"        : "// language: Cobol","CSS"          : "/* language: CSS */","CUDA"         : "// language: Cuda","Dart"         : "// language: Dart","Delphi"       : "{language: Delphi}","Dockerfile"   : "# language: Dockerfile","Elixir"       : "# language: Elixir","Erlang"       : f"% language: Erlang","Excel"        : "' language: Excel","F#"           : "// language: F#","Fortran"      : "!language: Fortran","GDScript"     : "# language: GDScript","GLSL"         : "// language: GLSL","Go"           : "// language: Go","Groovy"       : "// language: Groovy","Haskell"      : "-- language: Haskell","HTML"         : "<!--language: HTML-->","Isabelle"     : "(*language: Isabelle*)","Java"         : "// language: Java","JavaScript"   : "// language: JavaScript","Julia"        : "# language: Julia","Kotlin"       : "// language: Kotlin","Lean"         : "-- language: Lean","Lisp"         : "; language: Lisp","Lua"          : "// language: Lua","Markdown"     : "<!--language: Markdown-->","Matlab"       : f"% language: Matlab","Objective-C"  : "// language: Objective-C","Objective-C++": "// language: Objective-C++","Pascal"       : "// language: Pascal","Perl"         : "# language: Perl","PHP"          : "// language: PHP","PowerShell"   : "# language: PowerShell","Prolog"       : f"% language: Prolog","Python"       : "# language: Python","R"            : "# language: R","Racket"       : "; language: Racket","RMarkdown"    : "# language: RMarkdown","Ruby"         : "# language: Ruby","Rust"         : "// language: Rust","Scala"        : "// language: Scala","Scheme"       : "; language: Scheme","Shell"        : "# language: Shell","Solidity"     : "// language: Solidity","SPARQL"       : "# language: SPARQL","SQL"          : "-- language: SQL","Swift"        : "// language: swift","TeX"          : f"% language: TeX","Thrift"       : "/* language: Thrift */","TypeScript"   : "// language: TypeScript","Vue"          : "<!--language: Vue-->","Verilog"      : "// language: Verilog","Visual Basic" : "' language: Visual Basic",
}app = FastAPI()@app.post("/")
async def create_item(request: Request):global model, tokenizerjson_post_raw = await request.json()json_post = json.dumps(json_post_raw)json_post_list = json.loads(json_post)lang = json_post_list.get('lang')prompt = json_post_list.get('prompt')max_length = json_post_list.get('max_length', 128)top_p = json_post_list.get('top_p', 0.95)temperature = json_post_list.get('temperature', 0.2)top_k = json_post_list.get('top_k', 1)if lang != "None":prompt = LANGUAGE_TAG[lang] + "\n" + promptinputs = tokenizer.encode(prompt, return_tensors="pt").to(model.device)response = model.generate(inputs,max_length=max_length,do_sample=temperature > 0,top_p=top_p,top_k=top_k,temperature=temperature)now = datetime.datetime.now()time = now.strftime("%Y-%m-%d %H:%M:%S")answer = {"response": response,"lang": lang,"status": 200,"time": time}log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'print(log)return answerdef get_model():tokenizer = AutoTokenizer.from_pretrained("THUDM/codegeex2-6b", trust_remote_code=True, cache_dir="/mnt/data/CodeGeeX2/model")# gpus文件在demo文件夹中model = load_model_on_gpus("THUDM/codegeex2-6b", num_gpus=3, cache_dir="/mnt/data/CodeGeeX2/model")model = model.eval()return tokenizer, modelif __name__ == '__main__':    parser = argparse.ArgumentParser()parser = add_code_generation_args(parser)args, _ = parser.parse_known_args()tokenizer, model = get_model()uvicorn.run(app, host=args.listen, port=args.port, workers=args.workers)

启动命令

python web_quick_start.py --listen '0.0.0.0' --port 7860 --workders 100# 另一个终端中调用
curl -X POST "http://127.0.0.1:7860" \-H 'Content-Type: application/json' \-d '{"lang": "Python", "prompt": "# Write a quick sort function"}'

参考资料

校验torch安装结果

import torch
print(torch.cuda.is_available())
# 返回gpu数量;
print(torch.cuda.device_count())
# 返回gpu名字,设备索引默认从0开始;
print(torch.cuda.get_device_name(0))
print(torch.cuda.current_device())# 查看nvidia cuda toolkit版本
nvcc -V

版本查询
cuda tookit版本:https://anaconda.org/nvidia/cuda-toolkit
pytorch与cuda对应版本:https://pytorch.org/get-started/previous-versions/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/177713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第29期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

C# 实现微信退款及对帐

目录 需求 基础准备 关键代码 操作界面 ​编辑 退款订单类及方法 退款功能实现 对帐 支付商家后台相关要点 实时交易帐单查询 精确交易帐单查询 小结 需求 在招聘报名系统里&#xff0c;考务费支付是其中一个环节&#xff0c;支付方式很多种&#xff0c;比如银联、…

MySQL数据库 增删改查

目录 MySQL 数据插入 MySQL 数据删除 MySQL 数据更新 MySQL 数据查询 MySQL 联合查询 解决乱码问题 MySQL 数据插入 向MySQL数据表插入数据通用的 INSERT INTO SQL语法&#xff1a; INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...v…

操作系统CLOCK算法

操作系统时钟(CLOCK)置换算法_时钟置换算法-CSDN博客 前七步相同 第八步的时候 发现页面在内存中 标记位变成1 但是指针不需要移动。

什么软件可以去视频水印?分享3个超实用去水印工具

什么软件可以去视频水印&#xff1f;短视频已然成为了我们日常生活或工作的一部分&#xff0c;当我们遇到感兴趣的视频想保存发现无法保存&#xff0c;或者保存后留有水印&#xff0c;非常影响我们视频观看度和分享欲&#xff0c;为了解决这一问题&#xff0c;许多针对视频水印…

如何用CHAT写“科技探索者”视频号运营方案

问CHAT&#xff1a;生成一篇“科技探索者”视频号运营方案&#xff0c;要求内容&#xff1a; &#xff08;1&#xff09;视频号的定位、面向的人群、主要发布哪方面的内容 &#xff08;2&#xff09;视频号的内容设计&#xff08;用什么样的方式来体现、最好有内容创意&#xf…

生产环境_sql获spark将课程与对应的选课人员以逗号分隔的形式存储

需求 将课程和人员列进行分组&#xff0c;然后将人员列聚合为逗号分隔的字符串。 数据 course | person Math | Alice Math | Bob Math | Charlie| Science| David Science| Emily Science| Frank sql代码&#xff1a; SELECT 课程, GROUP_CONCAT(人员 ORD…

学习笔记-瑞吉外卖项目实战(一)

软件开发整体介绍 软件开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型介绍 技术选型 功能架构 角色 开发环境搭建 数据 创建database reggie&#xff0c;在里面创建表&#xff1a; maven 创建springboot项目并导入相关依赖坐标&#xff1a; 我们可以在项目…

【已解决】AttributeError: module ‘matplotlib‘ has no attribute ‘imshow‘

首先 在学习OpenCV的第一个程序&#xff0c;碰到这个问题记录一下。首先我已经安装好了matplotlib 如下图&#xff1a; 所以可以排除的就是我已经具备了这个库&#xff0c;那就是我在调用的时候出现的问题。 其次 回到pycharm&#xff0c;检查一下代码并做出如下的修改。 …

通达信抛物线SAR指标原理详解、参数设置及选股公式

抛物线指标(SAR)是由技术分析大师威尔斯威尔德(Welles Wilder)发明的&#xff0c;在其1978 年出版的《技术交易系统新概念》一书中介绍了该指标。SAR指标通过跟踪股票价格的动态变化&#xff0c;在走势图上以一系列点的形式显示&#xff0c;提供了一种判断趋势反转的方法&#…

鸿蒙应用开发-初见:入门知识、应用模型

基础知识 Stage模型应用程序包结构 开发并打包完成后的App的程序包结构如图 开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件&#xff0c;即HAP一个应用中的.hap文件合在一起称为一个Bundle&#xff0c;bundleName是应用的唯一标识 需要特别说明的是&…

某医院小程序存在支付漏洞和越权

某医院小程序存在支付漏洞和越权查看他人身份证&#xff0c;手机号&#xff0c;住址等信息 一个医院线上的小程序 登陆后点击个人信息&#xff0c;抓包&#xff0c;放到repeter模块&#xff0c; 修改strUserID参数可以越权查看别人信息 放intruder模块可以跑数据&#xff0c;这…

Redis缓存设计典型问题

目录 缓存穿透 缓存失效&#xff08;击穿&#xff09; 缓存雪崩 热点缓存key重建优化 缓存与数据库双写不一致 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据…

MybatisPlus改造逻辑删除有多方便

MybatisPlus的逻辑删除可以有效保留历史数据。之前没有用逻辑删除的项目&#xff0c;想改造成逻辑删除总共需要几步&#xff1f; 答案&#xff1a;4步搞定 一、修改pom.xml的MybatisPlus版本&#xff08;注意版本兼容性&#xff09; <properties>...<!--<mybatis-…

anyRTC 融合音视频能力底座:助力企业数字化转型

随着全球化的发展&#xff0c;产业竞争日益激烈。数字化转型和创新成为了企业提高竞争力、实现可持续发展的重要手段&#xff0c;面对产业结构调整、资源环境挑战、数字技术与创新带来的行业颠覆与机遇&#xff0c;企业需要进行数字化转型和创新以适应新环境和新时代的挑战。 …

selinux-policy-default(2:2.20231119-2)软件包内容详细介绍(4)

接前一篇文章:selinux-policy-default(2:2.20231119-2)软件包内容详细介绍(3) 4. 重点文件内容解析 (1)control/postist文件 上一回解析了control/postinst文件的部分内容,本回继续往下解析。为了便于理解,再次贴出postinst完整代码: #!/bin/sh set -e# summary o…

跟 keep-alive 有关的生命周期是哪些?

前言&#xff1a;在开发 Vue 项目的时候&#xff0c;大部分组件是没必要多次渲染的&#xff0c;所以 Vue 提供了一 个内置组件 keep-alive 来缓存组件内部状态&#xff0c;避免重新渲染&#xff0c;在开发 Vue 项目的时候&#xff0c;大部分 组件是没必要多次渲染的&#xff0c…

P13 C++ 类 | 结构体内部的静态static

目录 01 前言 02 类内部创建静态变量的例子 03 在类的内部创建静态变量的作用 04 最后的话 01 前言 本期我们讨论 static 在一个类或一个结构体中的具体情况。 在几乎所有面向对象的语言中&#xff0c;静态在一个类中意味着特定的东西。这意味着在类的所有实例中&#xff…

【06】Python字符串专题

文章目录 1.转义字符2.文档字符串3.格式化字符串★★★3.1 拼串3.2 占位符3.3 `str.format()`方法3.4 f-strings方法4. 字符串的其它操作4.1 `len()` 获取字符串长度4.2`max()` 与 `min()`4.3 `split()`分割字符串4.4 `join()` 拼接字符串4.5 `find()` 查找字符串4.6 `replace(…

Springbot启动报错-类文件具有错误的版本 61.0, 应为 52.0

错误再现&#xff1a; 启动Springboot项目时候报错 java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/Maven/apache-maven-3.6.3/repository/org/springframework/boot/spring-boot/3.0.0/spring-boot-3.0.0.jar!/org/springframework/boot/Sprin…