阿里云服务器部署 六 PaddleNLP词向量服务

 安装Python3

sudo yum install -y lrzsz

cd /opt/dockerinstall
mkdir python3
准备相关的jar包  Index of /ftp/python/3.7.9/

scp Python-3.7.9.tgz root@bigdata42:/opt/dockerinstall/python3/
scp Python-3.7.9.tgz root@bigdata43:/opt/dockerinstall/python3/

yum -y install gcc

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel

tar -zxvf Python-3.7.9.tgz

cd Python-3.7.9/

./configure --prefix=/usr/local/python3
make && make install
sudo ln -sf /usr/local/python3/bin/python3.7 /usr/bin/python3
sudo ln -sf /usr/local/python3/bin/pip3.7 /usr/bin/pip3

vim ~/.bashrc

添加

export PATH="/usr/local/python3/bin:$PATH"

source ~/.bashrc



安装PaddleNLP和PaddlePaddle



升级 pip3

/usr/local/python3/bin/python3.7 -m pip install --upgrade pip

升级libstdc++

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

发现少了GLIBCXX_3.4.20,解决方法是升级libstdc++

sudo yum provides libstdc++.so.6

 

cd /opt/dockerinstall/

sudo wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip

scp libstdc.so_.6.0.26.zip root@bigdata42:/opt/dockerinstall/

scp libstdc.so_.6.0.26.zip root@bigdata43:/opt/dockerinstall/

sudo yum install -y unzip
unzip libstdc.so_.6.0.26.zip



cp libstdc++.so.6.0.26 /usr/lib64/

cd /usr/lib64/

ls -l | grep libstdc++

sudo rm libstdc++.so.6

sudo ln -s libstdc++.so.6.0.26 libstdc++.so.6

strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

安装paddlenlp2.5.2
cd /opt/dockerinstall/

pip3 install paddlenlp==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

scp PaddleNLP.tar.gz root@bigdata42:/opt/dockerinstall/
scp PaddleNLP.tar.gz root@bigdata43:/opt/dockerinstall/

tar -zxvf PaddleNLP.tar.gz

cd /opt/dockerinstall/PaddleNLP/applications/text_classification/multi_class/deploy/simple_serving

安装paddlepaddle
pip3 install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple

pip3 install urllib3==1.26.18

nohup python3 -m uvicorn main_new:app --host 172.16.108.41 --port 6001 --workers 4 > paddlenlpweb_new.log 2>&1 &

nohup python3 -m uvicorn main_new:app --host 172.16.108.42 --port 6001 --workers 4 > paddlenlpweb_new.log 2>&1 &

nohup python3 -m uvicorn main_new:app --host 172.16.108.43 --port 6001 --workers 4 > paddlenlpweb_new.log 2>&1 &

nohup python3 -m uvicorn main_new:app --host 172.16.108.44 --port 6001 --workers 4 > paddlenlpweb_new.log 2>&1 &

tail -500f paddlenlpweb_new.log

测试:

curl -X POST http://172.16.108.41:6001/ -H 'Content-Type: application/json' -d '{"data":[{"text": "智能大屏"}, {"text": "智能销售"}]}'

curl -X POST http://172.16.108.42:6001/ -H 'Content-Type: application/json' -d '{"data":[{"text": "智能大屏"}, {"text": "智能销售"}]}'

curl -X POST http://172.16.108.43:6001/ -H 'Content-Type: application/json' -d '{"data":[{"text": "智能大屏"}, {"text": "智能销售"}]}'

curl -X POST http://172.16.108.44:6001/ -H 'Content-Type: application/json' -d '{"data":[{"text": "智能大屏"}, {"text": "智能销售"}]}'


 

使用 Systemd 管理服务
 

  1. 创建服务文件
    注意要修改ip
[Unit]
Description=PaddleNLP Web Service
After=network-online.target
Wants=network-online.target

[Service]
User=paddlenlp_user
Group=paddlenlp_user
WorkingDirectory=/opt/dockerinstall/PaddleNLP/applications/text_classification/multi_class/deploy/simple_serving
ExecStart=/usr/bin/uvicorn main_new:app --host 172.16.108.44 --port 6001 --workers 4
Restart=on-failure
RestartSec=5s
Environment=PYTHONUNBUFFERED=1
StandardOutput=file:/data/dockerinstall/PaddleNLP/paddlenlpweb.log
StandardError=file:/data/dockerinstall/PaddleNLP/paddlenlpweb_error.log
Environment=PYTHONUNBUFFERED=1  # 确保 Python 输出实时写入(避免缓冲延迟)
MemoryLimit=512M
CPUQuota=80%
# 可选安全增强配置
PrivateTmp=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

注意 和 nginx在同一台服务器的端口号需要改为 6003
 

三、操作步骤(部署前必做)

1️⃣ ‌创建专用用户

mkdir -p /data/dockerinstall/PaddleNLP

sudo useradd -r -s /usr/sbin/nologin paddlenlp_user  # 创建无登录权限的系统用户
sudo chown -R paddlenlp_user:paddlenlp_user /opt/dockerinstall/PaddleNLP  # 确保用户有目录权限
sudo chown -R paddlenlp_user:paddlenlp_user /data/dockerinstall/PaddleNLP
 

cd /home
mkdir paddlenlp_user

sudo chown paddlenlp_user:paddlenlp_user /home/paddlenlp_user # 确保用户拥有其主目录 sudo chmod 755 /home/paddlenlp_user # 设置合理权限

 sudo chown -R paddlenlp_user:paddlenlp_user /opt/dockerinstall/PaddleNLP
sudo chmod -R 755 /opt/dockerinstall/PaddleNLP
sudo chown -R paddlenlp_user:paddlenlp_user /data/dockerinstall/PaddleNLP
sudo chmod -R 755 /data/dockerinstall/PaddleNLP

sudo -u paddlenlp_user cat /proc/self/statm

安装 Uvicorn
pip3 install uvicorn[standard]


pip3 show uvicorn | grep Location

vim ~/.bashrc
添加

export PATH="/usr/local/python3/bin:$PATH"
export PATH="$PATH:~/.local/bin"

source ~/.bashrc

which uvicorn

 ‌配置日志轮转(防止日志无限增长)

创建 Logrotate 配置文件:
paddlenlpweb

sudo chown paddlenlp_user:paddlenlp_user paddlenlpweb

/data/dockerinstall/PaddleNLP/paddlenlpweb.log
/data/dockerinstall/PaddleNLP/paddlenlpweb_error.log {
    daily             # 按天轮转
    rotate 30          # 保留最近30天日志
    missingok         # 文件不存在时不报错
    compress          # 压缩旧日志(节省空间)
    delaycompress     # 延迟压缩(避免与写入冲突)
    notifempty        # 空文件不轮转
    create 0644 paddlenlp_user paddlenlp_user  # 轮转后新建文件的权限和属主
}

touch paddlenlpweb.log

touch paddlenlpweb_error.log

netstat -tunple | grep 6001

sudo chown -R paddlenlp_user:paddlenlp_user /opt/dockerinstall/PaddleNLP
sudo chmod -R 755 /opt/dockerinstall/PaddleNLP
sudo chown -R paddlenlp_user:paddlenlp_user /data/dockerinstall/PaddleNLP
sudo chmod -R 755 /data/dockerinstall/PaddleNLP

先停止 6001端口的服务
 ‌部署服务
sudo cp paddlenlpweb.service /etc/systemd/system/
sudo cp paddlenlpweb /etc/logrotate.d/
sudo systemctl daemon-reload
sudo systemctl start paddlenlpweb

重启

sudo cp paddlenlpweb.service /etc/systemd/system/
sudo systemctl daemon-reload

sudo systemctl restart paddlenlpweb

sudo systemctl status paddlenlpweb

停止服务
sudo systemctl disable paddlenlpweb

sudo systemctl stop paddlenlpweb
sudo rm /etc/systemd/system/paddlenlpweb.service
sudo systemctl daemon-reload

分析启动时序‌:
systemd-analyze verify /etc/systemd/system/paddlenlpweb.service

检查资源限制‌:
systemctl show paddlenlpweb --property=MemoryLimit,CPUQuota

sudo systemctl status paddlenlpweb
 

还是有异常
 

分步解决方案

1. ‌确认用户 paddlenlp_user 是否存在

id paddlenlp_user # 检查用户是否存在

  • 若用户不存在‌,创建用户并指定主目录:

    sudo useradd -m -d /home/paddlenlp_user paddlenlp_user # 自动创建主目录

2. ‌修复主目录权限

mkdir -p /home/paddlenlp_user‌

sudo chown paddlenlp_user:paddlenlp_user /home/paddlenlp_user # 确保用户拥有其主目录 sudo chmod 755 /home/paddlenlp_user # 设置合理权限

 sudo chown -R paddlenlp_user:paddlenlp_user /opt/dockerinstall/PaddleNLP
sudo chmod -R 755 /opt/dockerinstall/PaddleNLP
sudo chown -R paddlenlp_user:paddlenlp_user /data/dockerinstall/PaddleNLP
sudo chmod -R 755 /data/dockerinstall/PaddleNLP
 

4. ‌检查系统文件访问兼容性

确保 /proc/self/statm 可读:

sudo -u paddlenlp_user cat /proc/self/statm # 验证用户权限

重启后:

curl -X POST http://172.16.108.44:6001/ -H 'Content-Type: application/json' -d '{"data":[{"text": "智能大屏"}, {"text": "智能销售"}]}'
测试也正常。

对nginx的配置修改如下:

# 定义词向量服务的upstream
    upstream wordvec-backend {
        server 172.16.108.44:6001 weight=1 max_fails=3 fail_timeout=10s;  # 本地Nginx服务器的10011端口(若服务部署在Nginx本机)
        server 172.16.108.43:6001 weight=1 max_fails=3 fail_timeout=10s;
        server 172.16.108.42:6001 weight=1 max_fails=3 fail_timeout=10s;  # 另一台服务器的10011端口
        keepalive 32;                # 保持长连接
        least_conn;                  # 最少连接数负载均衡
    }


# 词向量服务的独立监听端口
    server {
        listen 6001;                # 监听外部请求的端口
        server_name 172.16.108.41;   # Nginx服务器IP或域名

        location / {
            proxy_pass http://wordvec-backend;  # 转发到词向量后端
            proxy_http_version 1.1;
            proxy_set_header Connection "";    # 启用HTTP 1.1长连接
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;

            # 超时时间设为20分钟(1200秒)
            proxy_connect_timeout 120s;  # 连接后端超时
            proxy_read_timeout     120s;  # 读取响应超时
            proxy_send_timeout     120s;  # 发送请求超时
        }
    }

sudo nginx -t

sudo nginx -s reload

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值