From 4f46a976f3654abd42841d05b3b686c3b8d726b5 Mon Sep 17 00:00:00 2001 From: zhousha <736730048@qq.com> Date: Mon, 15 Sep 2025 16:17:15 +0800 Subject: [PATCH] update --- .gitignore | 2 + 026_0010.jpg | Bin 0 -> 26683 bytes Dockerfile | 23 +++++ README.md | 29 ++++++ model_test_caltech_http_mr100.py | 148 +++++++++++++++++++++++++++++++ 5 files changed, 202 insertions(+) create mode 100644 .gitignore create mode 100755 026_0010.jpg create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 model_test_caltech_http_mr100.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c8b8eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.zip +.DS_Store diff --git a/026_0010.jpg b/026_0010.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5571278ef07a23729c722521b046fab84eaa3a5f GIT binary patch literal 26683 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 -F "image=@/home/zhoushasha/models/026_0010.jpg" +``` diff --git a/model_test_caltech_http_mr100.py b/model_test_caltech_http_mr100.py new file mode 100644 index 0000000..5597531 --- /dev/null +++ b/model_test_caltech_http_mr100.py @@ -0,0 +1,148 @@ +import torch +import time +import os +from PIL import Image +from transformers import AutoImageProcessor, AutoModelForImageClassification +from flask import Flask, request, jsonify +from io import BytesIO + +# 设置CPU核心数(仅用于可能的底层优化,不影响GPU推理) +os.environ["OMP_NUM_THREADS"] = "4" +os.environ["MKL_NUM_THREADS"] = "4" +os.environ["NUMEXPR_NUM_THREADS"] = "4" +os.environ["OPENBLAS_NUM_THREADS"] = "4" +os.environ["VECLIB_MAXIMUM_THREADS"] = "4" +torch.set_num_threads(4) + +# 设备配置 - 只关注GPU +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +print(f"当前设备: {device}") +print(f"CPU核心数设置: {torch.get_num_threads()}") + +class ImageClassifier: + def __init__(self, model_path: str): + self.processor = AutoImageProcessor.from_pretrained(model_path) + + # 仅加载GPU模型 + if device.type == "cuda": + self.model = AutoModelForImageClassification.from_pretrained(model_path).to(device) + else: + self.model = None # 无GPU时模型为None + + # 保存id2label映射(从模型配置获取) + if self.model: + self.id2label = self.model.config.id2label + else: + self.id2label = None + + def _predict_with_model(self, image) -> dict: + """使用GPU执行预测""" + try: + # 检查GPU模型是否可用 + if not self.model or device.type != "cuda": + return { + "class_id": -1, + "class_name": "error", + "confidence": 0.0, + "device_used": str(device), + "processing_time": 0.0, + "error": "CUDA设备不可用或模型未加载" + } + + # 记录开始时间 + start_time = time.perf_counter() + + # 处理图片并移动到GPU + inputs = self.processor(images=image, return_tensors="pt").to(device) + + with torch.no_grad(): + ts = time.time() + outputs = self.model(** inputs) + print('mr100 T1', time.time() - ts, flush=True) + + ts = time.time() + for i in range(1000): + outputs = self.model(**inputs) + print('mr100 T2', time.time() - ts, flush=True) + + logits = outputs.logits + probs = torch.nn.functional.softmax(logits, dim=1) + max_prob, max_idx = probs.max(dim=1) + class_idx = max_idx.item() + + # 计算处理时间 + processing_time = round(time.perf_counter() - start_time, 6) + + return { + "class_id": class_idx, + "class_name": self.id2label[class_idx], + "confidence": float(max_prob.item()), + "device_used": str(device), + "processing_time": processing_time + } + except Exception as e: + return { + "class_id": -1, + "class_name": "error", + "confidence": 0.0, + "device_used": str(device), + "processing_time": 0.0, + "error": str(e) + } + + def predict_single_image(self, image) -> dict: + """预测单张图片,仅使用GPU""" + results = {"status": "success"} + results["prediction"] = self._predict_with_model(image) + return results + +# 初始化服务 +app = Flask(__name__) +MODEL_PATH = os.environ.get("MODEL_PATH", "/model") # 模型路径(环境变量或默认路径) +classifier = ImageClassifier(MODEL_PATH) + +@app.route('/v1/private/s782b4996', methods=['POST']) +def predict_single(): + """接收单张图片并返回GPU预测结果""" + if 'image' not in request.files: + return jsonify({ + "status": "error", + "prediction": { + "class_id": -1, + "class_name": "error", + "confidence": 0.0, + "device_used": str(device), + "processing_time": 0.0, + "error": "请求中未包含图片" + } + }), 400 + + image_file = request.files['image'] + try: + image = Image.open(BytesIO(image_file.read())).convert("RGB") + result = classifier.predict_single_image(image) + return jsonify(result) + except Exception as e: + return jsonify({ + "status": "error", + "prediction": { + "class_id": -1, + "class_name": "error", + "confidence": 0.0, + "device_used": str(device), + "processing_time": 0.0, + "error": str(e) + } + }), 500 + +@app.route('/health', methods=['GET']) +def health_check(): + return jsonify({ + "status": "healthy", + "cuda_available": device.type == "cuda", + "device_used": str(device), + "cpu_threads": torch.get_num_threads() + }), 200 + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=80, debug=False)