1660s部署ChatGLM3-6B

用Chatgpt一段时间了,最近在想有没有离线可以装在本机的chatgpt,这样哪天openai把咱们渠道堵得死死的之后,咱们还有东西可用。网上一搜还真有,比如这个ChatGLM3,我用的就是ChatGLM3-6B。

​​​​​​​官网有详细的部署教程,但实际操作的时候还是有点问题。

下面是我的部署过程:

我的环境:

windows 11 + 12400 + 32G内存 + 1660s显卡(6G显存)

1.下载代码
# 先克隆代码
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
2.安装Conda

conda用来隔离环境,比如电脑上装了python3.11,这里需要使用python3.10,就可以用conda来隔离。

conda下载地址:Conda Documentation — conda 24.1.2 documentation

安装完之后,在命令行中输入conda,如果找不到命令,可以在开始菜单中找下面这个:

进入conda命令行之后,执行下面的命令,意思是创建chatglm3-demo的隔离环境,使用python3.10

conda create -n chatglm3-demo python=3.10
conda activate chatglm3-demo
3.安装python的依赖包

在conda命令行中切换到ChatGLM3目录

切换目录如下所示:

执行下面的代码:

cd ChatGLM3
# 先安装ChatGLM3的依赖,可能时间比较长。
# 可以指定清华的源:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
pip install -r requirements.txt
# 再切换到composite_demo下面安装依赖,因为我们最终要跑的web页面在这个下面
cd composite_demo
pip install -r requirements.txt
4.安装pytorch

官方教程里面没有提这个,我按照官方教程弄完之后,发现走的是cpu,而不是gpu,因为看任务管理器显卡没反应,而且对话半天出不来结果。

这个pytorch默认调用的cpu,可以用下面这个命令查看:

# 可以看到显示的是cpu
$ python -c "import torch; print(torch.__version__)"
2.2.0+cpu

# 可以看到cuda不可用,就是nvidia的cuda不可用,就是显卡不可用
$ python -c "import torch; print(torch.cuda.is_available())"
False

PyTorch可以到 pytorch官网查看对应的版本

可以在红框里面选择操作系统、语言等,有个要注意就是CUDA的版本,可以用下面的命令获取:

nvidia-smi

比如我这边的版本就是12.4,所以选择pytorch中的CUDA 12.1

最终得到的绿框的内容,复制到本机执行就可以了。这个包很大,有2.5G。它会自动卸载原来的cpu版本的包,再安装GPU版本的包。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

安装完之后,再查看下:

# 可以看到已经变成cu121
$ python -c "import torch; print(torch.__version__)"
2.2.0+cu121

# 可以看到cuda变成True,表示可用
$ python -c "import torch; print(torch.cuda.is_available())"
True
5.修改源码

官方描述默认要13GB显存,如果GPU显存有限,改成它下面这样。

实测,改成官方这样之后报错:RuntimeError: Library cublasLt is not initialized

由于我之前调试过stable-diffusion-webui,当时是设置的一半显存,于是我就在想这个改成一半是不是也可以?

要改的就是下面这两行代码:

class HFClient(Client):
    def __init__(self, model_path: str, tokenizer_path: str, pt_checkpoint: str = None):
        self.model_path = model_path
        self.tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, trust_remote_code=True)

        if pt_checkpoint is not None and os.path.exists(pt_checkpoint):
            config = AutoConfig.from_pretrained(
                model_path,
                trust_remote_code=True,
                pre_seq_len=PRE_SEQ_LEN
            )
            # self.model = AutoModel.from_pretrained(
            #     model_path,
            #     trust_remote_code=True,
            #     config=config,
            #     device_map="auto").eval()
            self.model = AutoModel.from_pretrained(
                model_path,
                trust_remote_code=True,
                config=config).half().cuda().eval()
            # add .quantize(4).cuda() before .eval() and remove device_map="auto" to use int4 model
            prefix_state_dict = torch.load(os.path.join(pt_checkpoint, "pytorch_model.bin"))
            new_prefix_state_dict = {}
            for k, v in prefix_state_dict.items():
                if k.startswith("transformer.prefix_encoder."):
                    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
            print("Loaded from pt checkpoints", new_prefix_state_dict.keys())
            self.model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
        else:
            self.model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True).half().cuda().eval()
            # add .quantize(4).cuda() before .eval() and remove device_map="auto" to use int4 model

然后再尝试运行,果然好了。(PS:第一次启动的时候会下载module,一共7个,每个1G多,比较慢)

运行代码切换到ChatGLM3\composite_demo,执行下面的命令:

streamlit run main.py

 最终效果:

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮助你部署ChatGPT模型。以下是一步一步的指南: 步骤1:准备环境 首先,你需要一个Python环境来运行模型。确保你已经安装了Python 3.6或更高版本。 步骤2:安装依赖项 在命令行中打开一个新的终端窗口,并使用以下命令安装所需的依赖项: ``` pip install transformers flask ``` 步骤3:下载并解压模型 从CSDN下载chatglm2-6b模型的权重文件,并将其解压缩到你选择的目录中。 步骤4:创建Flask应用程序 在你选择的目录中创建一个名为app.py的Python文件,并使用以下代码创建一个基本的Flask应用程序: ```python from flask import Flask, request, jsonify from transformers import GPT2LMHeadModel, GPT2Tokenizer app = Flask(__name__) model_path = "path/to/your/model" tokenizer = GPT2Tokenizer.from_pretrained(model_path) model = GPT2LMHeadModel.from_pretrained(model_path) @app.route("/chat", methods=["POST"]) def chat(): data = request.json input_text = data["input_text"] input_ids = tokenizer.encode(input_text, return_tensors="pt") output = model.generate(input_ids, max_length=100) response = tokenizer.decode(output[0], skip_special_tokens=True) return jsonify({"response": response}) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) ``` 步骤5:运行应用程序 在终端窗口中,导航到包含app.py文件的目录,并运行以下命令来启动应用程序: ``` python app.py ``` 步骤6:测试应用程序 使用HTTP客户端(如Postman或cURL)向http://localhost:5000/chat发送POST请求,并在请求正文中包含以下JSON数据: ```json { "input_text": "你想说的话" } ``` 你将收到一个包含ChatGPT模型生成的响应的JSON响应。 这就是部署chatglm2-6b模型的基本步骤。你可以根据需要进行修改和扩展。希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值