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
英文地址,請注明出處:http://en.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 …