Ultralytics YOLO27:

نشر نموذج YOLO مُدرَّب مسبقًا باستخدام Ultralytics على Vertex AI للاستدلال#

سيوضح لك هذا الدليل كيفية تحويل نموذج YOLO26 مُدرَّب مسبقًا باستخدام Ultralytics إلى حاوية، وإنشاء خادم استدلال FastAPI له، ونشر النموذج مع خادم الاستدلال على Google Cloud Vertex AI. سيغطي التنفيذ النموذجي حالة استخدام اكتشاف الكائنات في YOLO26، لكن المبادئ نفسها تنطبق على استخدام أوضاع YOLO الأخرى.

قبل أن نبدأ، ستحتاج إلى إنشاء مشروع في Google Cloud Platform (GCP). ستحصل على أرصدة بقيمة $300 في GCP لاستخدامها مجانًا بصفتك مستخدمًا جديدًا، وهذا المبلغ يكفي لاختبار إعداد قيد التشغيل يمكنك توسيعه لاحقًا لأي حالة استخدام أخرى لـ YOLO26، بما في ذلك التدريب أو الاستدلال الدفعي والمتدفق.

ما ستتعلمه#

  1. إنشاء خلفية استدلال لنموذج Ultralytics YOLO26 باستخدام FastAPI.
  2. إنشاء مستودع في GCP Artifact Registry لتخزين صورة Docker الخاصة بك.
  3. إنشاء صورة Docker التي تحتوي على النموذج ودفعها إلى Artifact Registry.
  4. استيراد النموذج إلى Vertex AI.
  5. إنشاء نقطة نهاية في Vertex AI ونشر النموذج.
لماذا تنشر نموذجًا في حاوية؟
  • تحكم كامل في النموذج مع Ultralytics: يمكنك استخدام منطق استدلال مخصص مع تحكم كامل في المعالجة المسبقة والمعالجة اللاحقة وتنسيق الاستجابات.
  • تتولى Vertex AI بقية المهام: تعمل على التوسّع التلقائي، مع توفير المرونة في إعداد موارد الحوسبة والذاكرة وتكوينات GPU.
  • تكاملات GCP الأصلية والأمان: إعداد سلس مع Cloud Storage وBigQuery وCloud Functions وعناصر تحكم VPC وسياسات IAM وسجلات التدقيق.

المتطلبات الأساسية#

  1. ثبّت Docker على جهازك.
  2. ثبّت Google Cloud SDK وصادِق لاستخدام gcloud CLI.
  3. يوصى بشدة بقراءة دليل البدء السريع لـ Docker الخاص بـ Ultralytics، لأنك ستحتاج إلى توسيع إحدى صور Docker الرسمية من Ultralytics أثناء اتباع هذا الدليل.

1. إنشاء خلفية استدلال باستخدام FastAPI#

أولًا، تحتاج إلى إنشاء تطبيق FastAPI لتقديم طلبات استدلال نموذج YOLO26. سيتولى هذا التطبيق تحميل النموذج والمعالجة المسبقة للصور ومنطق الاستدلال (التنبؤ).

أساسيات الامتثال في Vertex AI#

تتوقع Vertex AI أن تنفذ الحاوية الخاصة بك نقطتي نهاية محددتين:

  1. نقطة نهاية Health (/health): يجب أن تُرجع حالة HTTP 200 OK عندما تكون الخدمة جاهزة.

  2. نقطة نهاية Predict (/predict): تقبل طلبات تنبؤ منظمة تحتوي على صور مشفرة بترميز base64 ومعلمات اختيارية. تنطبق حدود حجم الحمولة وفقًا لنوع نقطة النهاية.

    ينبغي أن تتبع حمولات الطلبات لنقطة النهاية /predict بنية JSON التالية:

    {
        "instances": [{ "image": "base64_encoded_image" }],
        "parameters": { "confidence": 0.5 }
    }

بنية مجلد المشروع#

سيجري معظم عمل الإنشاء داخل حاوية Docker، كما ستُحمّل Ultralytics نموذج YOLO26 مُدرَّبًا مسبقًا، لذا يمكنك إبقاء بنية المجلد المحلي بسيطة:

YOUR_PROJECT/
├── src/
│   ├── __init__.py
│   ├── app.py              # Core YOLO26 inference logic
│   └── main.py             # FastAPI inference server
├── tests/
├── .env                    # Environment variables for local development
├── Dockerfile              # Container configuration
├── LICENSE                 # AGPL-3.0 License
└── pyproject.toml          # Python dependencies and project config
ملاحظة مهمة بشأن الترخيص

تخضع نماذج وإطار عمل Ultralytics YOLO26 لترخيص AGPL-3.0، الذي يتضمن متطلبات امتثال مهمة. احرص على قراءة مستندات Ultralytics حول كيفية الامتثال لشروط الترخيص.

إنشاء pyproject.toml مع التبعيات#

لإدارة مشروعك بسهولة، أنشئ ملف pyproject.toml مع التبعيات التالية:

[project]
name = "YOUR_PROJECT_NAME"
version = "0.0.1"
description = "YOUR_PROJECT_DESCRIPTION"
requires-python = ">=3.10,<3.13"
dependencies = [
   "ultralytics>=8.3.0",
   "fastapi[all]>=0.89.1",
   "uvicorn[standard]>=0.20.0",
   "pillow>=9.0.0",
]

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
  • سيُستخدم uvicorn لتشغيل خادم FastAPI.
  • سيُستخدم pillow لمعالجة الصور، لكنك لست مقيدًا بصور PIL فقط — إذ تدعم Ultralytics تنسيقات أخرى عديدة.

إنشاء منطق الاستدلال باستخدام Ultralytics YOLO26#

بعد إعداد بنية المشروع والتبعيات، يمكنك تنفيذ منطق الاستدلال الأساسي لـ YOLO26. أنشئ ملف src/app.py ليتولى تحميل النموذج ومعالجة الصور والتنبؤ، باستخدام Python API الخاصة بـ Ultralytics.

# src/app.py

from ultralytics import YOLO

# Model initialization and readiness state
model_yolo = None
_model_ready = False

def _initialize_model():
    """Initialize the YOLO model."""
    global model_yolo, _model_ready

    try:
        # Use pretrained YOLO26n model from Ultralytics base image
        model_yolo = YOLO("yolo26n.pt")
        _model_ready = True

    except Exception as e:
        print(f"Error initializing YOLO model: {e}")
        _model_ready = False
        model_yolo = None

# Initialize model on module import
_initialize_model()

def is_model_ready() -> bool:
    """Check if the model is ready for inference."""
    return _model_ready and model_yolo is not None

سيؤدي ذلك إلى تحميل النموذج مرة واحدة عند بدء تشغيل الحاوية، وسيُشارك النموذج بين جميع الطلبات. إذا كان النموذج سيتعامل مع حمل استدلال كثيف، فمن المستحسن اختيار نوع جهاز ذي ذاكرة أكبر عند استيراد نموذج إلى Vertex AI في خطوة لاحقة.

بعد ذلك، أنشئ دالتي أدوات لمعالجة صور الإدخال والإخراج باستخدام pillow. يدعم YOLO26 صور PIL أصليًا.

def get_image_from_bytes(binary_image: bytes) -> Image.Image:
    """Convert image from bytes to PIL RGB format."""
    input_image = Image.open(io.BytesIO(binary_image)).convert("RGB")
    return input_image
def get_bytes_from_image(image: Image.Image) -> bytes:
    """Convert PIL image to bytes."""
    return_image = io.BytesIO()
    image.save(return_image, format="JPEG", quality=85)
    return_image.seek(0)
    return return_image.getvalue()

أخيرًا، نفّذ الدالة run_inference التي ستتولى اكتشاف الكائنات. في هذا المثال، سنستخرج مربعات الإحاطة وأسماء الفئات ودرجات الثقة من تنبؤات النموذج. ستُرجع الدالة قاموسًا يحتوي على الاكتشافات والنتائج الأولية لمزيد من المعالجة أو التعليق التوضيحي.

def run_inference(input_image: Image.Image, confidence_threshold: float = 0.5) -> Dict[str, Any]:
    """Run inference on an image using YOLO26n model."""
    # Check if model is ready
    if not is_model_ready():
        print("Model not ready for inference")
        return {"detections": [], "results": None}

    try:
        # Make predictions and get raw results
        results = model_yolo.predict(
            imgsz=640, source=input_image, conf=confidence_threshold, save=False, augment=False, verbose=False
        )

        # Extract detections (bounding boxes, class names, and confidences)
        detections = []
        if results and len(results) > 0:
            result = results[0]
            if result.boxes is not None and len(result.boxes.xyxy) > 0:
                boxes = result.boxes

                # Convert tensors to numpy for processing
                xyxy = boxes.xyxy.cpu().numpy()
                conf = boxes.conf.cpu().numpy()
                cls = boxes.cls.cpu().numpy().astype(int)

                # Create detection dictionaries
                for i in range(len(xyxy)):
                    detection = {
                        "xmin": float(xyxy[i][0]),
                        "ymin": float(xyxy[i][1]),
                        "xmax": float(xyxy[i][2]),
                        "ymax": float(xyxy[i][3]),
                        "confidence": float(conf[i]),
                        "class": int(cls[i]),
                        "name": model_yolo.names.get(int(cls[i]), f"class_{int(cls[i])}"),
                    }
                    detections.append(detection)

        return {
            "detections": detections,
            "results": results,  # Keep raw results for annotation
        }
    except Exception as e:
        # If there's an error, return empty structure
        print(f"Error in YOLO detection: {e}")
        return {"detections": [], "results": None}

اختياريًا، يمكنك إضافة دالة لوضع تعليقات توضيحية على الصورة باستخدام مربعات الإحاطة والتسميات عبر أسلوب الرسم المضمّن في Ultralytics. سيكون هذا مفيدًا إذا أردت إرجاع صور مشروحة في استجابة التنبؤ.

def get_annotated_image(results: list) -> Image.Image:
    """Get annotated image using Ultralytics built-in plot method."""
    if not results or len(results) == 0:
        raise ValueError("No results provided for annotation")

    result = results[0]
    # Use Ultralytics built-in plot method with PIL output
    return result.plot(pil=True)

إنشاء خادم استدلال HTTP باستخدام FastAPI#

بعد أن أصبح لديك منطق الاستدلال الأساسي لـ YOLO26، يمكنك إنشاء تطبيق FastAPI لتقديمه. سيتضمن ذلك نقطتي نهاية فحص الصحة والتنبؤ المطلوبتين من Vertex AI.

أولًا، أضف عمليات الاستيراد واضبط التسجيل لصالح Vertex AI. ونظرًا إلى أن Vertex AI تتعامل مع stderr بوصفه مخرجات خطأ، فمن المنطقي توجيه السجلات إلى stdout.

import sys

from loguru import logger

# Configure logger
logger.remove()
logger.add(
    sys.stdout,
    colorize=True,
    format="<green>{time:HH:mm:ss}</green> | <level>{message}</level>",
    level=10,
)
logger.add("log.log", rotation="1 MB", level="DEBUG", compression="zip")

لتحقيق الامتثال الكامل لـ Vertex AI، عرّف نقاط النهاية المطلوبة في متغيرات البيئة واضبط حد حجم الطلبات. يوصى باستخدام نقاط نهاية Vertex AI الخاصة لنشرات الإنتاج. وبهذه الطريقة ستحصل على حد أعلى لحجم حمولة الطلب (10 MB بدلًا من 1.5 MB لنقاط النهاية العامة)، إلى جانب أمان قوي والتحكم في الوصول.

# Vertex AI environment variables
AIP_HTTP_PORT = int(os.getenv("AIP_HTTP_PORT", "8080"))
AIP_HEALTH_ROUTE = os.getenv("AIP_HEALTH_ROUTE", "/health")
AIP_PREDICT_ROUTE = os.getenv("AIP_PREDICT_ROUTE", "/predict")

# Request size limit (10 MB for private endpoints, 1.5 MB for public)
MAX_REQUEST_SIZE = 10 * 1024 * 1024  # 10 MB in bytes

أضف نموذجي Pydantic للتحقق من صحة طلباتك واستجاباتك:

# Pydantic models for request/response
class PredictionRequest(BaseModel):
    instances: list
    parameters: Optional[Dict[str, Any]] = None

class PredictionResponse(BaseModel):
    predictions: list

أضف نقطة نهاية فحص الصحة للتحقق من جاهزية النموذج. وهذا مهم لـ Vertex AI، إذ من دون فحص صحة مخصص، سيرسل المنسق الخاص بها طلبات إلى مقابس عشوائية ولن يتمكن من تحديد ما إذا كان النموذج جاهزًا للاستدلال. يجب أن يُرجع الفحص 200 OK عند النجاح و503 Service Unavailable عند الفشل:

# Health check endpoint
@app.get(AIP_HEALTH_ROUTE, status_code=status.HTTP_200_OK)
def health_check():
    """Health check endpoint for Vertex AI."""
    if not is_model_ready():
        raise HTTPException(status_code=503, detail="Model not ready")
    return {"status": "healthy"}

أصبح لديك الآن كل ما يلزم لتنفيذ نقطة نهاية التنبؤ التي ستتعامل مع طلبات الاستدلال. ستقبل ملف صورة، وتنفذ الاستدلال، وتُرجع النتائج. لاحظ أن الصورة يجب أن تكون مشفرة بترميز base64، ما يزيد حجم الحمولة أيضًا بنسبة تصل إلى 33%.

@app.post(AIP_PREDICT_ROUTE, response_model=PredictionResponse)
async def predict(request: PredictionRequest):
    """Prediction endpoint for Vertex AI."""
    try:
        predictions = []

        for instance in request.instances:
            if isinstance(instance, dict):
                if "image" in instance:
                    image_data = base64.b64decode(instance["image"])
                    input_image = get_image_from_bytes(image_data)
                else:
                    raise HTTPException(status_code=400, detail="Instance must contain 'image' field")
            else:
                raise HTTPException(status_code=400, detail="Invalid instance format")

            # Extract YOLO26 parameters if provided
            parameters = request.parameters or {}
            confidence_threshold = parameters.get("confidence", 0.5)
            return_annotated_image = parameters.get("return_annotated_image", False)

            # Run inference with YOLO26n model
            result = run_inference(input_image, confidence_threshold=confidence_threshold)
            detections_list = result["detections"]

            # Format predictions for Vertex AI
            detections = []
            for detection in detections_list:
                formatted_detection = {
                    "class": detection["name"],
                    "confidence": detection["confidence"],
                    "bbox": {
                        "xmin": detection["xmin"],
                        "ymin": detection["ymin"],
                        "xmax": detection["xmax"],
                        "ymax": detection["ymax"],
                    },
                }
                detections.append(formatted_detection)

            # Build prediction response
            prediction = {"detections": detections, "detection_count": len(detections)}

            # Add annotated image if requested and detections exist
            if (
                return_annotated_image
                and result["results"]
                and result["results"][0].boxes is not None
                and len(result["results"][0].boxes) > 0
            ):
                import base64

                annotated_image = get_annotated_image(result["results"])
                img_bytes = get_bytes_from_image(annotated_image)
                prediction["annotated_image"] = base64.b64encode(img_bytes).decode("utf-8")

            predictions.append(prediction)

        logger.info(
            f"Processed {len(request.instances)} instances, found {sum(len(p['detections']) for p in predictions)} total detections"
        )

        return PredictionResponse(predictions=predictions)

    except HTTPException:
        # Re-raise HTTPException as-is (don't catch and convert to 500)
        raise
    except Exception as e:
        logger.error(f"Prediction error: {e}")
        raise HTTPException(status_code=500, detail=f"Prediction failed: {e}")

أخيرًا، أضف نقطة دخول التطبيق لتشغيل خادم FastAPI.

if __name__ == "__main__":
    import uvicorn

    logger.info(f"Starting server on port {AIP_HTTP_PORT}")
    logger.info(f"Health check route: {AIP_HEALTH_ROUTE}")
    logger.info(f"Predict route: {AIP_PREDICT_ROUTE}")
    uvicorn.run(app, host="0.0.0.0", port=AIP_HTTP_PORT)

أصبح لديك الآن تطبيق FastAPI كامل يمكنه تقديم طلبات استدلال YOLO26. يمكنك اختباره محليًا بتثبيت التبعيات وتشغيل الخادم، باستخدام uv مثلًا.

# Install dependencies
uv pip install -e .

# Run the FastAPI server directly
uv run src/main.py

لاختبار الخادم، يمكنك الاستعلام عن نقطتي النهاية /health و/predict باستخدام cURL. ضع صورة اختبار في مجلد tests. ثم شغّل الأوامر التالية في Terminal:

# Test health endpoint
curl http://localhost:8080/health

# Test predict endpoint with base64 encoded image
curl -X POST -H "Content-Type: application/json" -d "{\"instances\": [{\"image\": \"$(base64 -i tests/test_image.jpg)\"}]}" http://localhost:8080/predict

ينبغي أن تتلقى استجابة JSON تحتوي على الكائنات المكتشفة. توقّع تأخيرًا قصيرًا في طلبك الأول، إذ تحتاج Ultralytics إلى جلب نموذج YOLO26 وتحميله.

2. توسيع صورة Ultralytics Docker باستخدام تطبيقك#

توفر Ultralytics عدة صور Docker يمكنك استخدامها أساسًا لصورة تطبيقك. سيثبّت Docker حزمة Ultralytics وبرامج تشغيل GPU اللازمة.

لاستخدام الإمكانات الكاملة لنماذج Ultralytics YOLO، ينبغي اختيار الصورة المحسّنة لـ CUDA للاستدلال على GPU. ومع ذلك، إذا كان الاستدلال على CPU كافيًا لمهمتك، فيمكنك توفير موارد الحوسبة باختيار الصورة المخصصة لـ CPU فقط أيضًا:

  • Dockerfile: صورة محسّنة لـ CUDA لتدريب واستدلال YOLO26 باستخدام GPU واحد أو عدة GPUs.
  • Dockerfile-cpu: صورة مخصصة لـ CPU فقط لاستدلال YOLO26.

إنشاء صورة Docker لتطبيقك#

أنشئ ملف Dockerfile في جذر مشروعك بالمحتوى التالي:

# Extends official Ultralytics Docker image for YOLO26
FROM ultralytics/ultralytics:latest

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1

# Install FastAPI and dependencies
RUN uv pip install fastapi[all] uvicorn[standard] loguru

WORKDIR /app
COPY src/ ./src/
COPY pyproject.toml ./

# Install the application package
RUN uv pip install -e .

RUN mkdir -p /app/logs
ENV PYTHONPATH=/app/src

# Port for Vertex AI
EXPOSE 8080

# Start the inference server
ENTRYPOINT ["python", "src/main.py"]

في المثال، تُستخدم صورة Docker الرسمية من Ultralytics، ultralytics:latest، أساسًا. وهي تحتوي بالفعل على نموذج YOLO26 وجميع التبعيات اللازمة. ونقطة دخول الخادم هي نفسها التي استخدمناها لاختبار تطبيق FastAPI محليًا.

إنشاء صورة Docker واختبارها#

يمكنك الآن إنشاء صورة Docker باستخدام الأمر التالي:

docker build --platform linux/amd64 -t IMAGE_NAME:IMAGE_VERSION .

استبدل IMAGE_NAME وIMAGE_VERSION بالقيم المطلوبة، مثل yolo26-fastapi:0.1. لاحظ أنه يجب إنشاء الصورة لبنية linux/amd64 إذا كنت تنشر على Vertex AI. ويجب ضبط المعلمة --platform صراحةً إذا كنت تنشئ الصورة على جهاز Mac مزود بمعالج Apple Silicon أو على أي بنية أخرى غير x86.

بعد اكتمال إنشاء الصورة، يمكنك اختبار صورة Docker محليًا:

docker run --platform linux/amd64 -p 8080:8080 IMAGE_NAME:IMAGE_VERSION

تُشغّل حاوية Docker الخاصة بك الآن خادم FastAPI على المنفذ 8080، وهي جاهزة لقبول طلبات الاستدلال. يمكنك اختبار نقطتي النهاية /health و/predict باستخدام أوامر cURL نفسها السابقة:

# Test health endpoint
curl http://localhost:8080/health

# Test predict endpoint with base64 encoded image
curl -X POST -H "Content-Type: application/json" -d "{\"instances\": [{\"image\": \"$(base64 -i tests/test_image.jpg)\"}]}" http://localhost:8080/predict

3. رفع صورة Docker إلى GCP Artifact Registry#

لاستيراد نموذجك الموجود في حاوية إلى Vertex AI، تحتاج إلى رفع صورة Docker إلى Google Cloud Artifact Registry. وإذا لم يكن لديك مستودع Artifact Registry بعد، فستحتاج إلى إنشاء واحد أولًا.

إنشاء مستودع في Google Cloud Artifact Registry#

افتح صفحة Artifact Registry في Google Cloud Console. إذا كنت تستخدم Artifact Registry للمرة الأولى، فقد يُطلب منك تفعيل Artifact Registry API أولًا.

Google Cloud Artifact Registry repository creation

  1. اختر Create Repository.
  2. أدخل اسم مستودعك. حدد المنطقة المطلوبة واستخدم الإعدادات الافتراضية للخيارات الأخرى، ما لم تكن بحاجة إلى تغييرها تحديدًا.
ملاحظة

قد يؤثر اختيار المنطقة في توافر الأجهزة وبعض قيود الحوسبة للمستخدمين من غير فئة Enterprise. يمكنك العثور على مزيد من المعلومات في الوثائق الرسمية لـ Vertex AI: حصص Vertex AI وحدودها

  1. بعد إنشاء المستودع، احفظ PROJECT_ID والموقع (المنطقة) واسم المستودع في خزنة الأسرار أو ملف .env. ستحتاج إليها لاحقًا لوضع علامة على صورة Docker ودفعها إلى Artifact Registry.

مصادقة Docker مع Artifact Registry#

صادِق عميل Docker الخاص بك مع مستودع Artifact Registry الذي أنشأته للتو. شغّل الأمر التالي في الطرفية:

gcloud auth configure-docker YOUR_REGION-docker.pkg.dev

وضع علامة على صورتك ودفعها إلى Artifact Registry#

ضع علامة على صورة Docker وادفعها إلى Google Artifact Registry.

استخدم علامات فريدة لصورك

يوصى باستخدام علامات فريدة في كل مرة تحدّث فيها صورتك. تعتمد معظم خدمات GCP، بما في ذلك Vertex AI، على علامات الصور لإدارة الإصدارات والتوسّع تلقائيًا، لذا من الممارسات الجيدة استخدام الإصدار الدلالي أو العلامات المستندة إلى التاريخ.

ضع علامة على صورتك باستخدام عنوان URL لمستودع Artifact Registry. استبدل العناصر النائبة بالقيم التي حفظتها سابقًا.

docker tag IMAGE_NAME:IMAGE_VERSION YOUR_REGION-docker.pkg.dev/YOUR_PROJECT_ID/YOUR_REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION

ادفع الصورة التي تحمل العلامة إلى مستودع Artifact Registry.

docker push YOUR_REGION-docker.pkg.dev/YOUR_PROJECT_ID/YOUR_REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION

انتظر حتى تكتمل العملية. ينبغي أن ترى الصورة الآن في مستودع Artifact Registry.

للحصول على تعليمات أكثر تحديدًا حول كيفية التعامل مع الصور في Artifact Registry، راجع وثائق Artifact Registry: دفع الصور وسحبها.

4. استيراد النموذج إلى Vertex AI#

باستخدام صورة Docker التي دفعتها للتو، يمكنك الآن استيراد النموذج إلى Vertex AI.

  1. في قائمة التنقل في Google Cloud، انتقل إلى Vertex AI > Model Registry. وبدلًا من ذلك، ابحث عن "Vertex AI" في شريط البحث أعلى Google Cloud Console.

Vertex AI Model Registry import interface

1. Click Import. 1. Select Import as a new model. 1. Select the region. You can choose the same region as your Artifact Registry repository, but your selection should be dictated by the availability of machine types and quotas in your region. 1. Select Import an existing model container.

Vertex AI import model dialog

1. In the Container image field, browse the Artifact Registry repository you created earlier and select the image you just pushed. 1. Scroll down to the Environment variables section and enter the predict and health endpoints, and the port that you defined in your FastAPI application.

Vertex AI environment variables configuration

1. Click Import. Vertex AI will take several minutes to register the model and prepare it for deployment. You will receive an email notification once the import is complete.

5. إنشاء نقطة نهاية في Vertex AI ونشر النموذج#

نقاط النهاية مقابل النماذج في Vertex AI

في مصطلحات Vertex AI، تشير نقاط النهاية إلى النماذج المنشورة، لأنها تمثل نقاط نهاية HTTP التي ترسل إليها طلبات الاستدلال، بينما تشير النماذج إلى عناصر ML المدربة المخزنة في Model Registry.

لنشر نموذج، تحتاج إلى إنشاء نقطة نهاية في Vertex AI.

  1. في قائمة التنقل في Vertex AI، انتقل إلى Endpoints. حدد المنطقة التي استخدمتها عند استيراد النموذج. انقر على Create.

Vertex AI create endpoint interface

1. Enter the Endpoint name. 1. For Access, Vertex AI recommends using private Vertex AI endpoints. Apart from security benefits, you get a higher payload limit if you select a private endpoint, however you will need to configure your VPC network and firewall rules to allow access to the endpoint. Refer to the Vertex AI documentation for more instructions on [private endpoints](https://docs.cloud.google.com/gemini-enterprise-agent-platform/machine-learning/predictions/choose-endpoint-type). 1. Click Continue. 1. On the Model settings dialog, select the model you imported earlier. Now you can configure the machine type, memory, and GPU settings for your model. Allow for ample memory if you are expecting high inference loads to ensure there are no I/O bottlenecks for the proper YOLO26 performance. 1. In Accelerator type, select the GPU type you want to use for inference. If you are not sure which GPU to select, you can start with NVIDIA T4, which is CUDA-supported.
حصص المناطق وأنواع الأجهزة

تذكّر أن بعض المناطق لديها حصص حوسبة محدودة جدًا، لذلك قد لا تتمكن من اختيار أنواع أجهزة أو GPUs معينة في منطقتك. إذا كان ذلك مهمًا، فغيّر منطقة النشر إلى منطقة ذات حصة أكبر. اعثر على مزيد من المعلومات في الوثائق الرسمية لـ Vertex AI: حصص Vertex AI وحدودها.

  1. بعد تحديد نوع الجهاز، يمكنك النقر على Continue. في هذه المرحلة، يمكنك اختيار تفعيل مراقبة النموذج في Vertex AI—وهي خدمة إضافية تتعقب أداء نموذجك وتوفر رؤى حول سلوكه. هذا الخيار اختياري ويتكبد تكاليف إضافية، لذا اختره وفقًا لاحتياجاتك. انقر على Create.

ستستغرق Vertex AI عدة دقائق (حتى 30 دقيقة في بعض المناطق) لنشر النموذج. ستتلقى إشعارًا بالبريد الإلكتروني عند اكتمال النشر.

6. اختبار النموذج المنشور#

بعد اكتمال النشر، ستوفر لك Vertex AI واجهة API نموذجية لاختبار النموذج.

لاختبار الاستدلال عن بُعد، يمكنك استخدام أمر cURL المتوفر أو إنشاء مكتبة عميل Python أخرى ترسل الطلبات إلى النموذج المنشور. تذكّر أنك تحتاج إلى ترميز صورتك باستخدام base64 قبل إرسالها إلى نقطة النهاية /predict.

Vertex AI endpoint testing with cURL

توقّع تأخيرًا قصيرًا في الطلب الأول

كما في الاختبار المحلي، توقّع تأخيرًا قصيرًا في الطلب الأول، إذ ستحتاج Ultralytics إلى جلب نموذج YOLO26 وتحميله في الحاوية قيد التشغيل.

لقد نشرت بنجاح نموذج YOLO26 مُدرَّبًا مسبقًا باستخدام Ultralytics على Google Cloud Vertex AI.

الأسئلة الشائعة#

  • نعم؛ لكنك ستحتاج أولًا إلى تصدير النموذج إلى تنسيق متوافق مع Vertex AI، مثل TensorFlow أو Scikit-learn أو XGBoost. توفر Google Cloud دليلًا حول تشغيل نماذج .pt على Vertex مع نظرة عامة كاملة على عملية التحويل: تشغيل نماذج PyTorch على Vertex AI.

    يُرجى ملاحظة أن الإعداد الناتج سيعتمد فقط على طبقة التقديم القياسية في Vertex AI، ولن يدعم ميزات إطار عمل Ultralytics المتقدمة. وبما أن Vertex AI تدعم النماذج الموجودة في حاويات دعمًا كاملًا ويمكنها توسيع نطاقها تلقائيًا وفقًا لتكوين النشر، فإنها تتيح لك الاستفادة من الإمكانات الكاملة لنماذج Ultralytics YOLO من دون الحاجة إلى تحويلها إلى تنسيق مختلف.

  • توفر FastAPI معدل نقل مرتفعًا لأحمال عمل الاستدلال. ويتيح دعم العمليات غير المتزامنة معالجة عدة طلبات متزامنة دون حظر الخيط الرئيسي، وهو أمر مهم عند تقديم نماذج الرؤية الحاسوبية.

    يؤدي التحقق التلقائي من الطلبات والاستجابات باستخدام FastAPI إلى تقليل أخطاء وقت التشغيل في خدمات الاستدلال الإنتاجية. وتكتسب هذه الميزة أهمية خاصة لواجهات برمجة تطبيقات اكتشاف الكائنات، حيث يُعد اتساق تنسيق الإدخال أمرًا بالغ الأهمية.

    تضيف FastAPI حدًا أدنى من الحمل الحسابي إلى مسار الاستدلال، مما يتيح توفير مزيد من الموارد لتنفيذ النموذج ومهام معالجة الصور.

    تدعم FastAPI أيضًا الأحداث المرسلة من الخادم (SSE)، وهو ما يفيد في سيناريوهات الاستدلال المتدفق.

  • تُعد هذه في الواقع ميزة من ميزات Google Cloud Platform، إذ تحتاج إلى اختيار منطقة لكل خدمة تستخدمها. وبالنسبة إلى مهمة نشر نموذج في حاوية على Vertex AI، فإن أهم اختيار للمنطقة هو الاختيار الخاص بسجل النماذج. وسيحدد ذلك مدى توفر أنواع الأجهزة والحصص المخصصة لنشر النموذج.

    إضافةً إلى ذلك، إذا كنت ستوسّع الإعداد وتخزّن بيانات التنبؤ أو النتائج في Cloud Storage أو BigQuery، فستحتاج إلى استخدام المنطقة نفسها المحددة لسجل النماذج لتقليل زمن الاستجابة وضمان معدل نقل مرتفع للوصول إلى البيانات.

التعليقات