يمكنك إنشاء نقطة نهاية LLM خاصة ومتوافقة مع OpenAI على البنية الأساسية Hugging Face بأمر واحد – لا توجد خوادم لتوفيرها، ولا Kubernetes، والدفع في الثانية. بمجرد الانتهاء من ذلك، يمكنك الاستعلام عنه من الكمبيوتر المحمول أو الكمبيوتر المحمول أو أي مكان آخر.

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

وهنا كل شيء من النهاية إلى النهاية.

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

  • طريقة دفع أو رصيد ائتماني مدفوع مقدمًا إيجابيًا (يتم إصدار فواتير الوظائف لكل دقيقة حسب استخدام الأجهزة).
  • huggingface_hub >= 1.20.0: pip install -U "huggingface_hub>=1.20.0".
  • تم تسجيل الدخول محليًا: hf auth login.

قم بتشغيل الخادم

hf jobs run يكون docker run للبنية التحتية ذات التردد العالي. نحن نستخدم الرسمية vllm/vllm-openai الصورة، اطلب GPU مع --flavor، واكشف عن منفذ vLLM باستخدام --expose:

hf jobs run --flavor a10g-large --expose 8000 --timeout 2h \
  vllm/vllm-openai:latest \
  vllm serve Qwen/Qwen3-4B --host 0.0.0.0 --port 8000

--expose 8000 يقوم بتوجيه منفذ الحاوية من خلال وكيل الوظائف العامة الخاص بـ HF (راجع دليل نماذج الخدمة للحصول على المرجع الكامل). يقوم الأمر بطباعة عنوان URL الذي يمكن الوصول إلى خادمك عليه:

✓ Job started
  id: 6a381ca1953ed90bfb947332
  url: https://huggingface.co/jobs/qgallouedec/6a381ca1953ed90bfb947332
Hint: Exposed ports are reachable at (requires an HF token with read access to the job):
  https://6a381ca1953ed90bfb947332--8000.hf.jobs

6a381ca1953ed90bfb947332 هو معرف وظيفتك. تابعوه، سنحتاجه. سوف نستخدم <job_id> كعنصر نائب له في بقية المنشور.

امنحها بضع دقائق لتنزيل الأوزان والتمهيد. عندما تظهر السجلات Application startup complete، أنت حي.

الاستعلام عنها من أي مكان

يتحدث vLLM واجهة OpenAI API، وكل طلب يحتاج فقط إلى رمز HF الخاص بك كرمز مميز لحامله. أسرع طريقة لضربها هي التجعيد:

curl https://<job_id>--8000.hf.jobs/v1/chat/completions \
  -H "Authorization: Bearer $(hf auth token)" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3-4B",
    "messages": [{"role": "user", "content": "Hello!"}],
    "chat_template_kwargs": {"enable_thinking": false}
  }'

الذي يُرجع JSON المعتاد بنمط OpenAI، مع choices[0].message.content عقد "Hello! How can I assist you today? 😊".

أو، من Python، قم بتوجيه عميل OpenAI إلى عنوان URL المكشوف وتمرير الرمز المميز كمفتاح API:

from huggingface_hub import get_token
from openai import OpenAI

client = OpenAI(
    base_url="https://<job_id>--8000.hf.jobs/v1",
    api_key=get_token(),
)
resp = client.chat.completions.create(
    model="Qwen/Qwen3-4B",
    messages=[{"role": "user", "content": "Hello!"}],
    extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print(resp.choices[0].message.content)
Hello! How can I assist you today? 😊

فحص صحي سريع قبل البدء: curl https://<job_id>--8000.hf.jobs/v1/models -H "Authorization: Bearer $(hf auth token)" يجب أن قائمة النموذج.

🔐 نقطة النهاية مسورة وليست عامة. يجب أن يحمل كل طلب رمز HF مع الوصول للقراءة إلى مساحة اسم الوظيفة. سيتم رفض زيارة المتصفح العادي. في الواقع، وكيل الوظائف يكون بوابة واجهة برمجة التطبيقات (API) الخاصة بك: يتم تحديد نطاق الوصول لك (ولمؤسستك). يعد هذا أمرًا جيدًا للاستخدام الخاص، ولكن تعامل مع عنوان URL وفقًا لذلك: لا تشاركه وأنت تتوقع أن يكون مفتوحًا، ولا تلصق الرمز المميز الخاص بك في أماكن غير موثوق بها. إذا كنت بحاجة إلى وصول عام أو تفصيلي، فضع بوابة مناسبة في المقدمة بدلاً من ذلك. أو راجع وظائف HF أو نقاط نهاية الاستدلال؟ أقل.

تنظيف

تتم محاسبة المهام بالثانية، لذا قم بإيقاف الخادم عند الانتهاء:

hf jobs cancel <job_id>

ال --timeout التي قمت بتعيينها عبارة عن شبكة أمان (ستتوقف تلقائيًا)، لكن الإلغاء بشكل صريح أرخص. ان a10g-large يعمل بسعر 1.50 دولارًا في الساعة – تحقق hf jobs hardware للحصول على قائمة الأسعار الكاملة واختيار أصغر نكهة تناسب الموديل الخاص بك.

المضي قدمًا: نماذج أكبر

ينطبق نفس الأمر على نماذج أكبر بكثير – اختر طرازًا أضخم --flavor واطلب من vLLM أن يقوم بتقسيم النموذج عبر وحدات معالجة الرسومات باستخدام --tensor-parallel-size. على سبيل المثال، نموذج خليط الخبراء 122B Qwen3.5 على 2×H200:

hf jobs run --flavor h200x2 --expose 8000 --timeout 2h \
  vllm/vllm-openai:latest \
  vllm serve Qwen/Qwen3.5-122B-A10B \
  --host 0.0.0.0 --port 8000 --tensor-parallel-size 2 \
  --max-model-len 32768 --max-num-seqs 256

--tensor-parallel-size يجب أن يتطابق مع عدد وحدات معالجة الرسومات في النكهة (h200x2 → 2، h200x8 → 8). يجري hf jobs hardware لمعرفة ما هو متاح وإعطاء نماذج أكبر فترة أطول --timeout، نظرًا لأنها تستغرق وقتًا أطول في التنزيل والتحميل. بالنسبة للنماذج الكبيرة، عادة ما تكون نكهات H200 هي الأفضل قيمة.

ال --max-model-len 32768 --max-num-seqs 256 العلامات خاصة بهذا النموذج: Qwen3.5-122B عبارة عن بنية Mamba/attention مختلطة مع سياق افتراضي مكون من 256 ألف رمز مميز، والذي لا يترك ذاكرة كافية لإعدادات الدفعة الافتراضية لـ vLLM. إن تحديد طول السياق وعدد التسلسل المتزامن يبقيه داخل ذاكرة وحدات معالجة الرسومات. إذا فشل النموذج في البدء بسبب خطأ نفاد الذاكرة أو خطأ كتلة ذاكرة التخزين المؤقت، فإن الاتصال بهذين الاثنين هو أول شيء يجب تجربته. كل شيء آخر (عنوان URL المكشوف، وعميل OpenAI، ومصادقة الرمز المميز) يظل كما هو تمامًا.

المضي قدمًا: قم بالدردشة معه في واجهة المستخدم

هل تفضل نافذة الدردشة على الضفيرة؟ بضعة أسطر من نقطة التدرج في نفس نقطة النهاية. يضيف --reasoning-parser deepseek_r1 إلى vllm serve الأمر حتى يعود تفكير Qwen3 كحقل منفصل (ليس ضروريًا، ولكنه مفيد)، ثم قم بتشغيل هذا الرمز محليًا (ستحتاج فقط إلى معرف الوظيفة):

import gradio as gr
from gradio import ChatMessage
from huggingface_hub import get_token
from openai import OpenAI

client = OpenAI(base_url="https://<job_id>--8000.hf.jobs/v1", api_key=get_token())

def chat(message, history):
    messages = [{"role": m["role"], "content": m["content"]} for m in history if not m.get("metadata")]
    messages.append({"role": "user", "content": message})
    stream = client.chat.completions.create(model="Qwen/Qwen3-4B", messages=messages, stream=True)

    thinking, answer = "", ""
    for chunk in stream:
        delta = chunk.choices[0].delta
        thinking += delta.model_extra.get("reasoning", "")
        answer += delta.content or ""
        out = []
        if thinking.strip():
            status = "done" if answer.strip() else "pending"
            out.append(ChatMessage(role="assistant", content=thinking, metadata={"title": "💭 Thinking", "status": status}))
        if answer.strip():
            out.append(ChatMessage(role="assistant", content=answer))
        yield out

gr.ChatInterface(chat).launch()

تشغيله، فتح http://127.0.0.1:7860والدردشة – يتدفق المنطق إلى اللوحة القابلة للطي، الإجابة أدناه.

للمضي قدمًا: SSH في الخادم قيد التشغيل

هل تحتاج إلى تصحيح أخطاء فشل بدء التشغيل، أو مشاهدة ذاكرة وحدة معالجة الرسومات، أو سجلات الذيل بشكل تفاعلي؟ يمكنك فتح الصدفة مباشرة في المهمة الجارية. إطلاقه مع --ssh وتأكد من تسجيل مفتاحك العام على Huggingface.co/settings/keys:

hf jobs run --flavor a10g-large --expose 8000 --timeout 2h --ssh \
  vllm/vllm-openai:latest \
  vllm serve Qwen/Qwen3-4B --host 0.0.0.0 --port 8000

ثم قم بالاتصال بمعرف الوظيفة:

hf jobs ssh <job_id>

أنت الآن داخل الحاوية، حيث يمكنك الركض nvidia-smiأو فحص العملية أو الضغط على النموذج مباشرة – مما يجعل تصحيح الأخطاء ومراقبتها أسهل بكثير من قراءة السجلات من الخارج. يتطلب دعم SSH huggingface_hub >= 1.20.0.

للمضي قدمًا: استخدمه كواجهة خلفية لعامل الترميز مع Pi

يمكن لنفس نقطة النهاية أن تدعم وكيل الترميز الطرفي. Pi هو أداة تسخير وكيل محايد للمزود. قم بتوجيهه إلى الوظيفة وستحصل على وكيل قراءة/كتابة/تحرير/Bash يعمل على النموذج المستضاف ذاتيًا.

شيء واحد يجب إعداده أولاً: يقوم الوكلاء بتوجيه النموذج من خلال استدعاءات الأداة، ولا يقبل vLLM تلك الاستدعاءات إلا إذا تم تشغيل الخادم مع تمكين استدعاء الأداة. لذا أعد التشغيل مع --enable-auto-tool-choice و أ --tool-call-parser مطابقة العائلة النموذجية (hermes ل Qwen3). يستفيد الوكلاء أيضًا من النموذج الأقوى، لذلك يعد هذا مكانًا جيدًا لجلب النموذج الأكبر:

hf jobs run --flavor h200x2 --expose 8000 --timeout 2h \
  vllm/vllm-openai:latest \
  vllm serve Qwen/Qwen3.5-122B-A10B \
  --host 0.0.0.0 --port 8000 --tensor-parallel-size 2 \
  --max-model-len 32768 --max-num-seqs 256 \
  --reasoning-parser deepseek_r1 \
  --enable-auto-tool-choice --tool-call-parser hermes

ثم قم بإضافة الوظيفة كمزود مخصص في ~/.pi/agent/models.json:

{
  "providers": {
    "hf-jobs": {
      "baseUrl": "https://<job_id>--8000.hf.jobs/v1",
      "api": "openai-completions",
      "apiKey": "!hf auth token",
      "models": [
        { "id": "Qwen/Qwen3.5-122B-A10B" }
      ]
    }
  }
}

ثم أطلق الوكيل ضده:

pi

النموذج الذي قمت بإعداده قبل بضعة أوامر، يقوم الآن بتشغيل وكيل تشفير تفاعلي في جهازك الطرفي.

وظائف التردد العالي أو نقاط النهاية الاستدلالية؟

ليست وظائف HF هي الطريقة الوحيدة لخدمة عارضة الأزياء على Hugging Face. إن نقاط نهاية الاستدلال هي منتجنا المُدار لنفس المهمة، وأي منها يناسبك يعتمد على ما تبحث عنه.

الوصول ل وظائف اتش اف عندما تريد أقصى قدر من المرونة والتحكم: هذا فقط docker run على البنية التحتية HF، لذلك عليك اختيار الصورة، على وجه الدقة vllm serve الأعلام والأجهزة، وتدفع في الثانية طوال مدة استمرار المهمة. وهذا يجعله مناسبًا تمامًا للتجارب، أو التقييمات لمرة واحدة، أو إنشاء الدُفعات، أو ركل الإطارات على النموذج قبل الالتزام بأي شيء.

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

مزيد من القراءة

تلتزم هذه المشاركة بـ vLLM، لكن نفس نمط كشف المنفذ يعمل مع أي خادم متوافق مع OpenAI. لخدمة GGUFs باستخدام llama.cpp أو تشغيل SGLang بدلاً من ذلك، راجع دليل تقديم النماذج في الوظائف، الذي يتنقل عبر تلك الواجهات الخلفية.

شاركها.
اترك تعليقاً