Observability
قابلية الرصد هي القدرة على تفسير الحالة الداخلية للنظام من السجلات والمقاييس وآثار التتبع التي يصدرها. تتناول OpenTelemetry وقابلية رصد التعلم الآلي.
قابلية المراقبة هي القدرة على فهم ما يحدث داخل نظام برمجي من خلال بيانات القياس عن بُعد التي يصدرها، ولا سيما السجلات والمقاييس وآثار التتبّع، بما يكفي للإجابة عن أسئلة جديدة حول سلوكه دون نشر شيفرة جديدة. ويعود المصطلح إلى نظرية التحكم، حيث عرّف رودولف كالمان النظام بأنه قابل للمراقبة عام 1960 إذا أمكن تحديد حالته الداخلية من مخرجاته. واعتمدته فرق البرمجيات في العقد الثاني من القرن الحادي والعشرين، حين انقسمت الأنظمة إلى خدمات كثيرة ولم تعد الأعطال تتوافق مع لوحات المعلومات المعدّة مسبقًا. وتشمل قابلية المراقبة في أنظمة التعلّم الآلي البيانات والتنبؤات أيضًا: ما المدخلات التي يتلقاها النموذج، وما الذي ينتجه، ومدى ثقته، وكيف يتغير كلاهما بمرور الوقت.
السجلات والمقاييس وآثار التتبّع#
تجيب ثلاثة أنواع من بيانات القياس عن بُعد، تُسمى غالبًا ركائز قابلية المراقبة، عن أسئلة مختلفة:
- المقاييس: سلاسل زمنية رقمية مثل معدل الطلبات ومعدل الأخطاء ومئينات زمن الاستجابة والذاكرة واستخدام GPU، وهي رخيصة التخزين وملائمة للوحات المعلومات والتنبيهات. ويسمي كتاب هندسة موثوقية المواقع من Google أربع إشارات أساسية ينبغي قياسها لكل خدمة: زمن الاستجابة وحركة المرور والأخطاء والتشبّع.
- السجلات: سجلات مؤرخة زمنيًا لأحداث فردية، وتكون أفيد عند تنظيمها بصيغة JSON مع حقول مثل معرّف الطلب وإصدار النموذج وحجم المدخلات، لتسهيل تصفيتها وإحصائها.
- آثار التتبّع: مسار طلب واحد عبر كل خدمة يمر بها، ويُسجّل على هيئة شجرة من المقاطع، لكل منها اسم ووقت بدء ومدة وسمات، ما يوضح أين استغرق الطلب وقته.
توفر OpenTelemetry، التي تأسست عام 2019 بدمج مشروعي OpenTracing وOpenCensus، واجهات API وحزم SDK وبروتوكول نقل (OTLP) محايدة تجاه المورّدين للإشارات الثلاث، وتخزّن أنظمة خلفية مثل Prometheus وGrafana وJaeger هذه الإشارات وتعرضها. ويتتبّع هذا المثال طلبًا واحدًا لتصنيف صورة باستخدام حزمة OpenTelemetry SDK الخاصة بـPython، ويسجل مقطعًا رئيسيًا للطلب ومقطعًا فرعيًا لكل مرحلة:
import torch
import torchvision
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
from opentelemetry.sdk.trace.export.in_memory_span_exporter import InMemorySpanExporter
# Keep finished spans in memory; a production service exports them over OTLP instead
exporter = InMemorySpanExporter()
provider = TracerProvider()
provider.add_span_processor(SimpleSpanProcessor(exporter))
tracer = provider.get_tracer("classifier")
model = torchvision.models.resnet18().eval()
frame = torch.rand(3, 1080, 1920)
# Trace one request as a parent span with a child span for each stage
with tracer.start_as_current_span("predict", attributes={"model.name": "resnet18", "image.height": 1080}):
with tracer.start_as_current_span("preprocess"):
batch = torchvision.transforms.functional.resize(frame, [224, 224]).unsqueeze(0)
with tracer.start_as_current_span("inference"), torch.inference_mode():
logits = model(batch)
spans = exporter.get_finished_spans()
names = {span.context.span_id: span.name for span in spans}
for span in spans:
parent = names[span.parent.span_id] if span.parent else "-"
print(f"{span.name:<11} {(span.end_time - span.start_time) / 1e6:5.1f} ms parent: {parent}")على CPU من نوع Apple M5 Pro، يطبع مقطع preprocess مدته من 1.0 إلى 1.4 مللي ثانية، ومقطع inference مدته من 7 إلى 9 مللي ثانية، وكلاهما يتبع predict بوصفه المقطع الرئيسي، إضافةً إلى مقطع predict مدته من 8 إلى 10 مللي ثانية؛ لذا تنسب آثار التتبّع معظم وقت الطلب إلى النموذج. وعند تصدير المقاطع عبر OTLP، تضيف كل خدمة تعالج الطلب مقاطع مرتبطة بمعرّف التتبّع نفسه، ثم يرسمها نظام خلفي مثل Jaeger على شكل مخطط زمني واحد.
قابلية الرصد مقابل المراقبة#
تراقب مراقبة النماذج حالات الإخفاق المعروفة باستخدام مقاييس ولوحات معلومات وعتبات تنبيه محددة مسبقًا، مثل تجاوز معدل الأخطاء 1% أو تجاوز زمن استدلال هدفًا معينًا. أما قابلية المراقبة فهي خاصية أوسع تتيح التحقيق في إخفاقات لم يتوقعها أحد، وذلك بتقسيم بيانات القياس التفصيلية بعد وقوع الحدث حسب العميل أو إصدار النموذج أو الكاميرا أو أي سمة أخرى. ويطلب كتاب Google SRE من المراقبة الإجابة عن سؤالين: ما المعطّل؟ ولماذا؟ وينتقل التحقيق من الإجابة عن السؤال الأول إلى الثاني عبر الإشارات الثلاث:
الذكاء الاصطناعي القابل للتفسير مجال منفصل يفسّر سبب إنتاج نموذج مخرجًا معينًا انطلاقًا من سمات المدخلات أو التنشيطات الداخلية، ويمكن تسجيل عمليات الإسناد الخاصة به بوصفها إشارة إضافية.
قابلية المراقبة في التعلّم الآلي#
غالبًا ما تفشل أنظمة التعلّم الآلي بصمت: فقد يجيب نموذج الرؤية الحاسوبية عن كل طلب برمز HTTP 200، بينما تتدهور تنبؤاته بسبب تحريك الكاميرا أو تغيّر الإضاءة أو ظهور منتج جديد. لذلك تضيف قابلية الرصد في ML بيانات القياس عن بُعد المتعلقة بالبيانات والتنبؤات إلى إشارات الخدمة المعتادة. تسجّل الفرق إحصاءات المدخلات، مثل حجم الصورة وسطوعها، للكشف عن انحراف البيانات، وتتتبّع توزيعات التنبؤات، مثل أعداد الفئات والنتائج الفارغة ومتوسط الثقة، وتحسب الدقة حسب الشريحة بمجرد وصول التسميات المرجعية، التي غالبًا ما تصل بعد أيام. وأثناء التدريب، ترسل دوال ردّ النداء منحنيات الخسارة والمقاييس واستخدام النظام لكل تشغيل إلى أدوات تتبّع التجارب، مثل TensorBoard وMLflow. أما بالنسبة إلى وكلاء AI وتطبيقات النماذج اللغوية الكبيرة، فتسجّل آثار التتبّع كل مطالبة وخطوة الاسترجاع واستدعاء أداة واستجابة، وتوحّد الاصطلاحات الدلالية لـ OpenTelemetry GenAI السمات مثل gen_ai.usage.input_tokens، بحيث تتّسق أعداد الرموز والتكاليف عبر الأدوات.
تتضمن كل نقطة نهاية مخصصة على منصة Ultralytics ميزة مراقبة النشر المدمجة: بطاقات لعدد الطلبات ومعدل الأخطاء وزمن الاستجابة عند المئين 95، وعلامة تبويب للسجلات تتضمن مستويات الخطورة ومرشح الأخطاء لإدخالات الأخطاء والتحذيرات، وإحصاءات للتنبؤات تعرض مخططات الفئات الأعلى ومتوسط الثقة بمرور الوقت وعدد التنبؤات لكل صورة وزمن استدلال النموذج بمعزل عن زمن استجابة الطلب. ويظهر انخفاض منحنى الثقة أو تغير الفئات الأعلى في تلك المخططات حتى مع نجاح كل الطلبات.










