• 【ChatGLM2-6B】nginx转发配置


    背景

    好不容易把ChatGLM2-6B语言模型部署好了,使用streamlit方式启动起来了,终于可以愉快的玩耍了,然后想着申请一个域名,使用HTTPS协议访问,但实践过程中,发现这个大语言模型的nginx转发配置还是有点小小的与众不同,折腾了半天,终于研究出来了。如何在只有CPULinux服务器上部署ChatGLM2-6B,可以参考这篇文章

    先请教下ChatGLM2这个问题

    在这里插入图片描述

    不错,回答的很是专业,使用这个配置还是有点用,但并不能解决所有问题。可能会出现如下几个错误

    ERR_INCOMPLETE_CHUNKED_ENCODING

    在请求/static/js/main.ccfdda4f.js这个js文件的时候,可能会报ERR_INCOMPLETE_CHUNKED_ENCODING错误,这是因为main.ccfdda4f.js这个js文件有1.1Mnginx的缓冲区不够用,需要修改nginx缓冲区设置

    location / {
        proxy_pass http://LLM;
    
        # main.ccfdda4f.js文件有1.1M,需要修改缓冲区大小
        proxy_buffer_size 1024k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers 16 1024k; #proxy_buffers缓冲区,网页平均在32k以下的设置
        proxy_busy_buffers_size 2048k; #高负荷下缓冲大小(proxy_buffers*2)
        proxy_temp_file_write_size 2048k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    websocket报403错误

    查看/_stcore/stream请求,是与大模型建立websocket连接,错误信息大致如下
    failed: Error during WebSocket handshake: Unexpected response code: 403,但如果使用80443端口,则不会报这个错,只要是非80443就会报这个错,根本原因是nginx转发的时候必须设置HostOrigin请求头,并且值还要一样

        location /_stcore/stream {
            proxy_pass http://LLM;
    
            # websocket配置
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_cache_bypass $http_upgrade;
            # Host与Origin必须设置,并且Host的值与Origin的值//后面的部分必须一致
            proxy_set_header Host "$http_host";
            proxy_set_header Origin "$scheme://$http_host";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 这里使用 h t t p h o s t 比 http_host比 httphosthost更准确
    • 经过实测,只要HostOrigin请求头$http_host部分的值相同就可以成功转发,即使随便写一个值,只要相同也可以成功转发

    关于nginx$host$http_host$proxy_host的区别

    变量是否显示端口
    $host不显示端口浏览器请求的ip,不显示端口
    $http_host端口存在则显示浏览器请求的ip和端口号
    $proxy_host默认80端口不显示,其它显示被代理服务的ip和端口号

    完整的nginx配置如下

    upstream LLM {
        server 127.0.0.1:8501;
    }
    
    server {
        listen       30443 ssl;
        listen       443 ssl;
        listen       80;
        server_name  chatglm.xxx.cn;
    
        ssl_certificate /etc/nginx/ssl/chatglm.xxx.cn.pem;
        ssl_certificate_key /etc/nginx/ssl/chatglm.xxx.cn.key;
    
        location / {
            proxy_pass http://LLM;
    
            # main.ccfdda4f.js文件有1.1M,需要修改缓冲区大小
            proxy_buffer_size 1024k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 16 1024k; #proxy_buffers缓冲区,网页平均在32k以下的设置
            proxy_busy_buffers_size 2048k; #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 2048k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }
    
        location /_stcore/stream {
            proxy_pass http://LLM;
    
            # websocket配置
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_cache_bypass $http_upgrade;
            # Host与Origin必须设置,并且Host的值与Origin的值//后面的部分必须一致
            proxy_set_header Host "$http_host";
            proxy_set_header Origin "$scheme://$http_host";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    总结

    • 以上是一步一步摸索出来的,研究成果来之不易
    • 任何看似简单的东西,动手实践后,才能理解的更加深刻
    • 终于对ChatGLM2-6B有了一定的了解,还会继续对大语言模型进行训练和微调,与君共勉
  • 相关阅读:
    无人机/FPV穿越机的遥控器/接收机等配件厂商
    Mac 中修改默认 的Python 版本
    【proverif】proverif的语法-解决中间人攻击-代码详解
    学习Spring5必知必会(4)~使用注解配置、使用java代码配置
    多用途折叠式行李拉车设计
    Redis笔记
    JSP response,request操作中(中文乱码)-如何解决呢?
    redis事务
    vue中属性执行顺序
    外包干了14天,技术退步明显。。。
  • 原文地址:https://blog.csdn.net/friendlytkyj/article/details/133960347