update 限制推理并发数

dev_lsy
liusiyang 3 months ago
parent e4436f7028
commit d5a2458036

@ -2313,12 +2313,19 @@ int ImgCheckAnalysisy::AI_Detect_BQ()
int submitted = 0; int submitted = 0;
int completed = 0; int completed = 0;
// 资源控制:限制最大并发数和最大待处理数
const int MAX_CONCURRENT = 5;
const int MAX_PENDING = 5;
long t2 = CheckUtil::getcurTime(); long t2 = CheckUtil::getcurTime();
while (completed < totalTasks) while (completed < totalTasks)
{ {
// 提交任务 // 提交任务:满足并发限制和待处理限制
if (submitted < totalTasks && runner->GetProcessingCount() < 10) if (submitted < totalTasks
&& runner->GetProcessingCount() < MAX_CONCURRENT
&& (submitted - completed) < MAX_PENDING)
{ {
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>(); std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
task->id = submitted; task->id = submitted;
@ -2878,12 +2885,18 @@ int ImgCheckAnalysisy::AI_Detect_QX()
cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg; cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg;
cv::Mat AIresultMask = pDetAIResult->AI_MaskImg; cv::Mat AIresultMask = pDetAIResult->AI_MaskImg;
// 资源控制:限制最大并发数和最大待处理数,防止GPU/CPU内存压力导致推理异常
const int MAX_CONCURRENT = 5; // 最大同时在推理中的任务数(降低GPU并发压力)
const int MAX_PENDING = 5; // submitted - completed 最大差值(限制内存中待处理结果数)
t2 = CheckUtil::getcurTime(); t2 = CheckUtil::getcurTime();
while (completed < totalTasks) while (completed < totalTasks)
{ {
// 如果任务还没提交完,且当前处理任务数 < 2,提交新任务 // 如果任务还没提交完,且满足并发限制和待处理限制,提交新任务
if (submitted < totalTasks && runner->GetProcessingCount() < 10) if (submitted < totalTasks
&& runner->GetProcessingCount() < MAX_CONCURRENT
&& (submitted - completed) < MAX_PENDING)
{ {
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>(); std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
@ -2934,6 +2947,8 @@ int ImgCheckAnalysisy::AI_Detect_QX()
AIresult.copyTo(AIresultMask(result->roi), AIresult); AIresult.copyTo(AIresultMask(result->roi), AIresult);
} }
// 仅在调试模式下保存 AI_Qx_MaskList,并限制数量
if (DetImgInfo_shareP->bDebugsaveImg && pDetAIResult->AI_Qx_MaskList.size() < 200)
{ {
std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>(); std::shared_ptr<ImageAllResult::AI_Det_MaskImg> temAIresult = std::make_shared<ImageAllResult::AI_Det_MaskImg>();
temAIresult->roi = result->roi; temAIresult->roi = result->roi;
@ -3039,11 +3054,18 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
pDetAIResult->AI_MaskImg = cv::Mat::zeros(AI_detImage.size(), CV_8UC1); pDetAIResult->AI_MaskImg = cv::Mat::zeros(AI_detImage.size(), CV_8UC1);
cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg; cv::Mat shieldImg = m_pImageAllResult->AI_shieldImg;
cv::Mat AIresultMask = pDetAIResult->AI_MaskImg; cv::Mat AIresultMask = pDetAIResult->AI_MaskImg;
// 资源控制:限制最大并发数和最大待处理数
const int MAX_CONCURRENT = 5;
const int MAX_PENDING = 5;
t2 = CheckUtil::getcurTime(); t2 = CheckUtil::getcurTime();
while (completed < totalTasks) while (completed < totalTasks)
{ {
// 如果任务还没提交完,且当前处理任务数 < 2,提交新任务 // 如果任务还没提交完,且满足并发限制和待处理限制,提交新任务
if (submitted < totalTasks && runner->GetProcessingCount() < 10) if (submitted < totalTasks
&& runner->GetProcessingCount() < MAX_CONCURRENT
&& (submitted - completed) < MAX_PENDING)
{ {
std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>(); std::shared_ptr<AIMulThreadRunBase::AITask> task = std::make_shared<AIMulThreadRunBase::AITask>();
@ -3111,6 +3133,24 @@ int ImgCheckAnalysisy::AI_Detect_127Cell()
pDetAIResult->blobDetParam->AIMaskImgBLobQueue.push(temAIresult); pDetAIResult->blobDetParam->AIMaskImgBLobQueue.push(temAIresult);
} }
} }
// AI检测残点图存图
if (DetImgInfo_shareP->bDebugsaveImg)
{
bool bNeedSave = false;
std::string roi_ext = "[" + std::to_string(result->roi.x) + "," + std::to_string(result->roi.y) + "]";
bNeedSave = true;
if (bNeedSave && !AIresult.empty())
{
std::string strSaveDir = "/home/aidlux/BOE/FOG/AI_Detect_127/" + DetImgInfo_shareP->strImgProductID + "/";
CheckUtil::CreateDir(strSaveDir);
std::string strSavePath_in = strSaveDir + m_strCurDetChannel +"_"+ roi_ext + "_"+ "in" + ".png";
std::string strSavePath_out = strSaveDir + m_strCurDetChannel +"_"+ roi_ext + "_"+ "out" + ".png";
cv::imwrite(strSavePath_in, result->input);
cv::imwrite(strSavePath_out, AIresult);
}
}
} }
completed++; completed++;
} }

Loading…
Cancel
Save