python + unicorn + xgboost + pytorch 搭建机器学习训练平台遇到的问题

1.背景

前段时间,使用 python + unicorn + xgboost + pytorch 写了一个机器学习训练平台的后端服务,

根据公司开发需要,需具备两种需求:1. 可以本地加载使用;2.支持web服务,

2. 使用本地加载使用

2.1 问题

针对第一种方式,为避免客户安装使用python 环境,因此将项目打包成.exe ,使用pyinstaller 进行打包,但

1.遇到体积大的问题,于是根据网上建议,使用为目创建虚拟环境,同时根据requiremnts ,将本项目所用的包全部放在虚拟环境下,最终2G 项目被打包成800兆,项目可在window上启动;

2.项目启动后,测试发现,使用.exe (onedir)项目启动效率比使用vscode 启动项目,要低非常多,大概降低5-6倍;

后来使用各种方法:

1. 网上说,除了pyinstaller 外,可使用Nuitka 编译打包,但经过测试,发现没有作用;

2.尝试使用嵌入式 Python + 脚本启动(性能 100%),经测试发现,效果还是不行;

3.使用Conda 安装带 MKL 的完整环境 ,测试发现:效果还是差;

那么到底是什么影响打包成.exe 的性能变差呢?

1.XGBoost 的 n_jobs=-1 会 spawn N 个子进程(Windows 必然 spawn);

2.每个子进程启动时:

  • 初始化新的 Python 解释器

  • 走 PyInstaller runtime hook 重定向模块搜索路径

  • 重新加载 numpy, scipy, xgboost.pyd(C++ 库初始化)

3.所有这些步骤在源码 + fork (linux)下几乎是 0 成本,但在 spawn(window) 下是全量重复执行;

4.模型越大、并行核心数越多,额外开销就越大

2.2 解决办法

针对于window 的.exe  ,

    os.environ['OMP_NUM_THREADS'] = '1'

    os.environ['OPENBLAS_NUM_THREADS'] = '1'

    os.environ['MKL_NUM_THREADS'] = '1'

    os.environ['VECLIB_MAXIMUM_THREADS'] = '1'

    os.environ['NUMEXPR_NUM_THREADS'] = '1'

    torch.set_num_threads(1)

xgboost(n_jobs=1)

3. 支持web 服务

3.1 问题

对于fastapi +  unicorn + xgboost + pytorch  ,其实更适合用于web 项目,因此,我将项目拷贝到服务器

在服务器上使用nginx 反向代理

但这里遇到2个问题:

问题1:针对本地加载,我接口端口用的是8000,因此接口都是

http:://127.0.0.1:8000/ 接口名

而我使用web 端口之后,nginx 默认使用80端口,因此,对内网代理转发后,会变成

http::// 公网id :80(可省略)/接口名,导致,和前端对接的时候,前端需要根据是本地pc 部署还是web 部署 使用不同的接口

问题2:

在训练过程中的数据发送,选择sse 方式,因此需要在nginx 配置sse

3.2 解决方案

对于web 端,内网端口改成8080 (或者其他非8000端口),然后nginx 监听端口从80 改成8000,

C:\nginx\nginx-1.28.0>start nginx.exe

C:\nginx\nginx-1.28.0>nginx -s reload

C:\nginx\nginx-1.28.0>nginx -s quit   

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

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

相关文章

Odoo 非标项目型生产行业解决方案:专业、完整、开源

概述您眼前的这张应用蓝图,是由 Odoo 官方金牌服务商——开源智造 (OSCG) 凭借多年在非标项目型制造领域的深厚积累,精心设计的 Odoo 解决方案核心流程图。它不仅体现了我们对行业复杂业务场景的深刻理解,更彰显了我们将先进的管理理念与强大…

OpenAI 开源模型 gpt-oss 是在合成数据上训练的吗?一些合理推测

编者按: OpenAI 首次发布的开源大模型 gpt-oss 系列为何在基准测试中表现亮眼,却在实际应用后发现不如预期? 我们今天为大家带来的这篇文章,作者推测 OpenAI 的新开源模型本质上就是微软 Phi 模型的翻版,采用了相同的合…

Linux / 宝塔面板下 PHP OPcache 完整实践指南

Linux / 宝塔面板下 PHP OPcache 完整实践指南 OPcache 是 PHP 官方提供的字节码缓存扩展,通过缓存 PHP 脚本的编译结果,提高 PHP 执行效率。本文讲解从 检测 → 开启 → 使用 → 清理 → 排查问题 的全流程,同时针对宝塔面板界面不实用或无法…

Linux(从入门到精通)

Linux概述 Linux内核最初只是由芬兰人林纳斯托瓦兹1991年在赫尔辛基大学上学时出于个人爱好而编写的。 Linux特点 首先Linux作为自由软件有两个特点:一是它免费提供源代码,二是爱好者可以根据自己的需要自由修改、复制和发布源码 Linux的各个发行版本 Linux 的发行版说简单…

链表相关题目---19、删除链表的倒数第N个节点

题目链接:删除链表的倒数第N个节点 这道题 很常规的思路就是 先拷贝两次头结点 然后一个先走N步 然后同时开始走,直到先走N步的节点为空后,就停止,此时另一个没提前走的节点的下一个就是要删除的节点。不过需要注意的是&#xff0…

Vue工具类使用指南:实用函数与全局组件安装

概述在Vue项目开发中,我们经常需要一些通用的工具函数来处理路径转换、链接判断、数据格式化等任务。本文将介绍一个实用的Vue工具类,包含多种常用功能,并演示如何在项目中使用它们。工具函数详解1. 路径转驼峰命名import { pathToCamel } fr…

​Visual Studio + UE5 进行游戏开发的常见故障问题解决

从零开始,学习 虚幻引擎5(UE5),开始游戏开发之旅! 本文章仅提供学习,切勿将其用于不法手段! 有些项目在 Visual Studio 的 Unreal Engine 集成配置界面中,涉及 ​Unreal Engine 与 V…

MiniCPM-V4.0开源并上线魔乐社区,多模态能力进化,手机可用,还有最全CookBook!

今天,面壁小钢炮新一代多模态模型 MiniCPM-V 4.0 正式开源。依靠 4B 参数,在 OpenCompass、OCRBench、MathVista 等多个榜单上取得了同级 SOTA 成绩,且 实现了在手机上稳定、丝滑运行。此外,面壁团队也正式开源了 推理部署工具 Mi…

FCT/ATE/ICT通用测试上位机软件

在当今智能制造与电子产品快速迭代的背景下,功能测试(FCT)已成为确保产品质量的关键环节。然而,传统的测试上位机往往存在扩展困难、功能固化、二次开发成本高等问题。为此,我们提出一款模块化、可扩展、可脚本化的 FC…

IndexTTS介绍与部署(B站开源的工业级语音合成模型)

语音合成效果非常好,可作为自己日常文本转语音使用工具! 软件介绍 IndexTTS 是由哔哩哔哩(B 站)开源的工业级可控高效零样本文本转语音(TTS)系统,基于 XTTS 和 Tortoise 构建,采用 …

uniApp对接实人认证

前端代码部分<template><view class"wrap"><view class"box"><view class"item flex-row align-items-center space-between"><view class"name"><text style"color:#FF4D4D">*</te…

pytest 并发执行用例(基于受限的测试资源)

概要 本文主要介绍了如何在测试资源&#xff08;被测对象&#xff09;受限的情况下&#xff0c;使用 pytest 进行并发测试以减少总体测试时间的方法和过程。 背景 在软件开发过程中&#xff0c;我们通常使用测试用例来持续保证软件的质量&#xff08;例如&#xff0c;确保关…

结构化智能编程:用树形向量存储重构AI代码理解范式

结构化智能编程:用树形向量存储重构AI代码理解范式 告别暴力embedding,通过分层存储策略让AI精准理解百万行代码库 在AI编程助手日益普及的今天,开发者面临一个新的困境:当项目规模达到数万甚至数百万行代码时,传统的暴力向量化方法不仅效率低下,而且往往导致AI理解偏差。…

GPT5 / 深度研究功能 无法触发

具体表现为&#xff1a; 1.没有GPT5标识2.回答是GPT43.无法触发深度研究功能请问如何解决&#xff1f;

一键脚本:自动安装 Nginx + Certbot + HTTPS(Let‘s Encrypt)

创建脚本文件​&#xff1a; vi setup_nginx_https.sh脚本内容&#xff1a; #!/bin/bash# # 一键安装 Nginx Certbot HTTPS (CentOS 7) # 功能&#xff1a;自动安装 Nginx、Certbot&#xff0c;配置 HTTPS&#xff0c;自动续期 # 使用方法&#xff1a;./setup_nginx_https.s…

SpringAI与MCP

MCP是什么&#xff1f;MCP 服务 代理服务&#xff08;Proxy&#xff09; 标准化接口 自动化适配MCP 的目的&#xff0c;就是让 AI 应用不再“为每个工具定制对接 ”&#xff0c;而是像使用 USB-C 一样&#xff0c;“插上即用”任何外部工具。没mcp之前不同的工具入参和出参千…

Coze用户退出登录流程分析-后端源码

前言 本文将深入分析Coze Studio项目的用户退出登录功能后端实现&#xff0c;通过源码解读来理解整个退出登录流程的架构设计和技术实现。退出登录作为用户认证系统的重要组成部分&#xff0c;主要负责清理用户会话状态&#xff0c;确保用户账户安全。 退出登录功能虽然相对简单…

【应急响应工具教程】Unix/Linux 轻量级工具集Busybox

1、工具简介BusyBox 是一个将常用 Unix/Linux 工具打包在单一可执行文件中的轻量级工具集&#xff0c;被称为 “嵌入式 Linux 的瑞士军刀”。 它将多个精简版的命令行工具&#xff08;如 ls、cat、cp、mv、grep 等&#xff09;集成到一个二进制文件中&#xff0c;并通过不同的调…

【React】案例:B站评论

目录 一、核心功能实现 二、id处理和时间处理 三、清空内容并重新聚焦 一、核心功能实现 1.获取评论内容&#xff1a;表单受控绑定 2.点击发布按钮发布评论 二、id处理和时间处理 1.rpid要求一个唯一的随机数id -uuid库 npm install uuid 使用方法&#xff1a;import {v4 as…

sqlite创建数据库,创建表,插入数据,查询数据的C++ demo

sqlite的API可参考&#xff1a;SQLite – C/C | 菜鸟教程 sqlite的官网API可参考&#xff1a;Introduction #include <iostream> #include <sqlite3.h> #include <string>// 回调函数&#xff0c;用于查询结果的输出 static int callback(void* data, int …