Hub Python Library documentation
صناديق الرمل
صناديق الرمل
واجهة برمجة تطبيقات Sandbox تجريبية. قد تتغير واجهتها وسلوكها دون إشعار مسبق. صُممت بيئات Sandbox المشتركة للأحمال العاملة ضمن نطاق ثقة واحد؛ استخدم بيئات Sandbox مخصصة للأحمال التي لا تثق ببعضها البعض.
اطّلع على دليل بيئات العزل لمعرفة كيفية استخدامها.
صندوق الرمل
فئة huggingface_hub.Sandbox
< source >( id: strserver: _SandboxServerlocal_id: str | Noneowns_sandbox: boolowns_server: boolsandbox_token: str | None = None )
حاسوب سحابي معزول يعمل على Hugging Face Jobs.
واجهة برمجة التطبيقات الخاصة بـ Sandbox تجريبية. قد تتغير واجهتها وسلوكها دون إشعار مسبق.
أنشئ بيئة مخصصة واحدة باستخدام Sandbox.create() (مهمة واحدة لكل بيئة)، أو احصل على العديد من البيئات المشتركة منخفضة التكلفة من SandboxPool.
أعد الاتصال ببيئة اختبار قيد التشغيل من أي مكان باستخدام Sandbox.connect(). استخدمها كمدير سياق لإنهائها عند الخروج:
>>> from huggingface_hub import Sandbox
>>> with Sandbox.create(image="python:3.12") as sbx:
... print(sbx.run("python --version").stdout)أطلق العميل المحلي لبروتوكول HTTP دون إنهاء بيئة العزل. العملية قابلة للتكرار.
لا شيء للرمال المشتركة (العميل ينتمي إلى مضيف الرمال المشتركة).
إعادة الاتصال ببيئة اختبار قيد التشغيل من أي مكان، باستخدام معرّفها فقط.
إنشاء
< source >( image: str = 'python:3.12'flavor: str = 'cpu-basic'idle_timeout: int | float | str | None = 600env: dict[str, typing.Any] | None = Nonesecrets: dict[str, typing.Any] | None = Nonevolumes: typing.Optional[typing.List[huggingface_hub._space_api.Volume]] = Nonenamespace: str | None = Noneforward_hf_token: bool = Falselabels: dict[str, str] | None = Nonestart_timeout: float = 120.0token: str | None = None )
المعاملات
- image (
str، اختياري، الافتراضي"python --3.12"): أي صورة Docker تحتوي على/bin/sh(Docker Hub أوhf.co/spaces/...). - flavor (
str، اختياري، الافتراضي"cpu-basic") — نوع العتاد، مثل"cpu-basic"،"a10g-small". راجعhf jobs hardware. - idle_timeout (
intأوfloatأوstr، اختياري، القيمة الافتراضية600) — إيقاف التشغيل تلقائيًا بعد هذه المدة من عدم النشاط (لا توجد استدعاءات لواجهات برمجة التطبيقات، ولا توجد عمليات قيد التنفيذ). القيمة الافتراضية هي 10 دقائق؛ مرّرNoneلتعطيلها. لاحظ أن أمر foreground لا يُحتسب حاليًا كنشاط، لذا فإن أمرrun()واحد يستغرق وقتًا أطول من هذه المدة دون أي حركة أخرى لواجهات برمجة التطبيقات قد يؤدي إلى إيقاف تشغيل بيئة العزل تحته — ارفع مهلة الإيقاف (أو مرّرNone) للأوامر الفردية الطويلة. - env (
dict[str, Any]، اختياري) — متغيرات البيئة المتاحة في بيئة العزل. - secrets (
dict[str, Any]، اختياري) — متغيرات البيئة السرية (تُشفَّر على جانب الخادم). - volumes (
List[Volume]، اختياري) — مستودعات/دلاء HF التي يجب تركيبها، راجع Volume. - namespace (
str، اختياري) — مساحة الاسم الخاصة بالمستخدم أو المنظمة التي سيتم التشغيل تحتها (الافتراضي هو المستخدم الحالي). - forward_hf_token (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانت القيمة True، يتم حقن رمز HF الخاص بك كـHF_TOKEN(بانتساب اختياري). - labels (
dict[str, str]، اختياري) — التسميات التي سيتم إرفاقها بـ HF Job الأساسي. - start_timeout (
float، اختياري، القيمة الافتراضية120.0) — الحد الأقصى بالثواني للانتظار حتى يصبح صندوق الرمل جاهزًا. - token (
str، اختياري) — تجاوز رمز HF.
أنشئ بيئة اختبار مخصصة (وظيفة HF واحدة) ومنع حتى تصبح جاهزة (حوالي 7 ثوانٍ على cpu-basic).
كل بيئة معزولة هي آلة افتراضية معزولة بالكامل، لذا فهي الخيار المناسب لأعباء العمل التي تستخدم وحدات معالجة الرسوميات أو الأكواد غير الموثوقة. أما لتوزيع العديد من بيئات المعالجة المعزولة منخفضة التكلفة على وحدات المعالجة المركزية، فاستخدم SandboxPool.
تعمل المهمة بعمر أقصى ثابت قدره 24 ساعة؛ idle_timeout هو الحارس الحقيقي — حيث تُغلق بيئة الاختبار الخاملة نفسها قبل ذلك بكثير.
تحتاج الصورة إلى /bin/sh فقط. يتم تنزيل خادم العزل عند بدء التشغيل باستخدام wget/curl إذا كان متاحًا، وإلا يتم قراءته من دلو الخادم الذي يُركَّب دائمًا (مما يضيف حوالي 2-3 ثوانٍ إلى بدء التشغيل البارد، لذا فإن توفير wget/curl يحافظ على سرعته).
قائمة العمليات الخلفية لهذا الصندوق الرملي.
يعيد العمليات التي تم تشغيلها بواسطة Sandbox.run()(..., background=True)؛ يمكن إيقاف عملية واحدة باستخدام SandboxProcess.kill(). تبقى العمليات التي اكتملت مؤخراً مدرجة (مع running=False وقيمة exit_code الخاصة بها)؛ ويحافظ الخادم على عدد محدود منها، لذا لن تُدرج جميع العمليات التي شغّلها صندوق الرمل إذا كانت آلاف الأوامر القصيرة.
proxy_url_for
< source >( port: int | strpath: str = '/'scheme: str = 'https://' ) → str
المعاملات
- port (
intأوstr) — المنفذ (المجموعة:<port>من المقبس unix) الذي يستمع عليه الخادم الداخلي. - path (
str، اختياري، الافتراضي"/") — المسار على الخادم الداخلي الذي يجب توجيه الإشارة إليه، مثل"/ws". - scheme (
str، اختياري، القيمة الافتراضية"https --//"): مخطط URL لبناء الرابط. القيمة الافتراضية هي"https://"؛ مرّر"wss://"لعميل WebSocket (الوكيل غير مرتبط بالبروتوكول، لذا يتغير مخطط جانب العميل فقط).
يعيد
str
عنوان URL مثل https://<job_id>--49983.hf.jobs/v1/.../proxy/8000/ws (أو
wss://... مع scheme="wss://").
عنوان URL عام يمرر الطلبات إلى خادم يعمل داخل هذه البيئة المعزولة.
تُحوَّل الطلبات الموجَّهة إلى الرابط المُعاد بواسطة خادم العزل الداخلي للعمل إلى الخادم الذي بدأته داخل بيئة العزل على port، بما في ذلك ترقية اتصالات WebSocket (ws(s)://) والاستجابات المُبَثَّة. استخدمه مع proxy_headers للمصادقة.
يجب أن يستمع صندوق الرمل على port على النحو التالي:
- الحوض / صندوق الرمل المشترك: لا يمكنه ربط منفذ TCP (Landlock)، لذا اربط مقبس يونكس في
$SBX_PROXY_DIR/<port>.sock(متغير البيئةSBX_PROXY_DIRمضبط في كل صندوق رمل). على سبيل المثالuvicorn app:app --uds $SBX_PROXY_DIR/8000.sock. - بيئة معزولة مخصصة: اربط منفذ TCP عاديًا على
127.0.0.1:<port>. (يمكنك أيضًا كشف المنفذ مباشرةً عبر وكيل المهمة دون المرور عبر هذه الطريقة.)
تشغيل
< source >( cmd: typing.Union[str, typing.List[str]]shell: bool | None = Noneenv: dict[str, typing.Any] | None = Nonecwd: str | None = Nonetimeout: float | None = Nonestdin: str | None = Noneon_stdout: typing.Optional[typing.Callable[[str], NoneType]] = Noneon_stderr: typing.Optional[typing.Callable[[str], NoneType]] = Nonecheck: bool = Truecapture_output: bool = Truebackground: bool = False )
المعاملات
- cmd (
strأوList[str]) — نص أمر shell (يُنفَّذ عبر/bin/sh -c) أو قائمة argv (تُنفَّذ مباشرةً). - shell (
bool، اختياري) — فرض وضع التنفيذ بدلاً من استنتاجه من نوعcmd. يُنفَّذTrueعبر/bin/sh -cويتطلب أن يكونcmdنصاً؛ بينما ينفذFalseالأمرcmdمباشرة ويتطلب أن يكون قائمة argv. القيمةNone(الافتراضية) تستنتج النوع تلقائياً. اضبطها صراحةً لتجنب الأخطاء الناتجة عن الاعتماد على النوع (مثلاً تنفيذ["echo hi"]كبرنامج واحد اسمه"echo hi"). - env (
dict[str, Any]، اختياري) — متغيرات بيئة إضافية لهذا الأمر. - cwd (
str، اختياري) — مجلد العمل. - timeout (
float, اختياري) — إنهاء الأمر (مجموعة العمليات بأكملها) بعد مرور هذا العدد من الثواني. - stdin (
str، اختياري) — البيانات التي سيتم كتابتها إلى مدخل الأمر القياسي. - on_stdout (
Callable[[str], None]، اختياري) — دالة استجابة تُستدعى مع مقاطع stdout كلما وصلت. - on_stderr (
Callable[[str], None]، اختياري) — دالة استجابة تُستدعى مع مقاطع stderr كلما وصلت. - check (
bool، اختياري، القيمة الافتراضيةTrue) — إذا كانت القيمة True، فسيتم رفعSandboxCommandErrorعند انتهاء الأمر برمز غير صفري. - capture_output (
bool، اختياري، القيمة الافتراضيةTrue) — إذا كانت القيمة True، يتم تجميع stdout/stderr في النتيجة المُعادَة. مرّرFalseعندما تريد فقطon_stdout/on_stderr: في هذه الحالة، يُسلَّم المخرجات إلى الدوال المستدعاة ثم يُتخلّى عنها، فلا يتعين على الأمر الذي ينتج جيجابايتات أن يتسع في الذاكرة. تكونresult.stdout/result.stderrفارغة في هذه الحالة. - background (
bool، اختياري، الافتراضيFalse) — إذا كانت القيمة True، ابدأ الأمر بشكل منفصل وأعد SandboxProcess فورًا بدلاً من الانتظار حتى الانتهاء وإرجاع SandboxCommandResult.
نفّذ أمرًا في بيئة العزل وانتظر اكتماله، مع بث المخرجات مباشرةً.
عند استخدام background=True، يبدأ الأمر بشكل منفصل ويعيد run كائن SandboxProcess فورًا دون انتظار انتهائه — وهو أمر مفيد للخوادم وغيرها من العمليات طويلة الأمد. يمكنك لاحقًا عرض قوائم بها باستخدام Sandbox.processes() وإيقاف أحدها باستخدام SandboxProcess.kill(). الخيارات الخاصة بالبث/الانتظار فقط (timeout، stdin، on_stdout، on_stderr، check) لا تنطبق في هذا الوضع.
يعيد: SandboxCommandResult (مع exit_code، stdout، stderr، duration_ms)، أو SandboxProcess عندما يكون background=True.
SandboxPool
فئة huggingface_hub.SandboxPool
< source >( image: str = 'python:3.12'flavor: str = 'cpu-basic'sandboxes_per_host: int = 50warm_up: int = 1max_hosts: int | None = Nonename: str | None = Noneidle_timeout: int | float | str | None = 600namespace: str | None = Nonestart_timeout: float = 120.0adopt_hosts: str = 'own'token: str | None = None_connect_mode: bool = False )
أسطول من مهام “host” المشتركة، حيث يحتوي كل منها على العديد من الصناديق الرملية المعزولة عبر landlock.
واجهة برمجة التطبيقات الخاصة بـ Sandbox تجريبية. قد تتغير واجهتها وسلوكها دون إشعار مسبق.
صناديق الرمل المجمّعة مخصصة لأحمال العمل داخل حدّ ثقة واحد. صندوق الرمل المجمّع هو معرّف مستخدم (uid) بالإضافة إلى مجموعة قواعد Landlock داخل آلة افتراضية مشتركة — وليس آلة افتراضية مستقلة — وكل صناديق الرمل على مضيف واحد تتشارك رمز المصادقة الخاص بذلك المضيف ومستوى التحكم المميز. استخدم مجمّعًا لنشر كودك الخاص بتكلفة منخفضة. بالنسبة لأحمال العمل التي لا تثق ببعضها البعض، استخدم Sandbox.create()، والذي يمنح كل واحد منها آلة افتراضية مستقلة. تُدرج الفجوات المحددة تحت عنوان “Known limitations” في الدليل المفاهيمي لصناديق الرمل.
المضيف الواحد هو مهمة HF واحدة تُحسب على الفاتورة (آلة افتراضية)؛ يشغّل خادم البيئة المعزولة ويوزّع حتى sandboxes_per_host بيئات معزولة خفيفة الوزن، معزولة عن بعضها البعض بواسطة uid و Landlock LSM. هذا يجعل التوسع الواسع منخفض التكلفة (حيث يُشارك تكلفة الآلة الافتراضية بين جميع بيئاتها المعزولة) وسريعًا (فإنشاء بيئة معزولة يستغرق تقريبًا ذهابًا وإيابًا واحدًا عبر الوسيط بمجرد أن يصبح المضيف جاهزًا). وهو الأنسب للعديد من بيئات المعالجة المركزية المتوازية مثل عمليات RL rollouts؛ أما في حال الحاجة إلى وحدات معالجة رسومية أو عزل قوي على مستوى الآلة الافتراضية بين أحمال العمل التي لا تثق ببعضها البعض، فاستخدم Sandbox.create() بدلاً من ذلك.
يُهيّئ المُنشئ مسبقًا warm_up مضيفًا (الافتراضي 1) ويتوقف حتى تصبح جاهزة؛ ثم تُهيَّأ المضيفات الإضافية عند الطلب كلما طُلبت بيئات العزل، وجميع
تُفكك عند close() (أو عند الخمول، عبر idle_timeout). لا يدير المستخدم المهام على الإطلاق:
>>> from huggingface_hub import SandboxPool
>>> with SandboxPool(image="python:3.12", flavor="cpu-basic", warm_up=2) as pool:
... boxes = [pool.create() for _ in range(100)] # packed across the warm hosts
... print(boxes[0].run("echo hi").stdout)
hiيجعل create() صندوق رمل واحدًا في كل مرة: فهو يعيد استخدام مضيف لا يزال لديه سعة حرة قبل تشغيل مضيف جديد، مما يتيح لك التوسع عند الطلب مع وصول المهام. لتجنب بدء التشغيل البارد في الاستدعاءات الأولى، قم بتوفير المضيفات مسبقًا باستخدام warm_up (أو warm). يتم اكتشاف المضيفات الدافئة عبر تسميات المهام، لذا فإن إعادة الاستخدام تعمل عبر العمليات أيضًا (تتصل مجموعة جديدة بنفس image/flavor/name
يحتضن نسخة سابقة من التشغيل السابق):
>>> pool = SandboxPool(image="python:3.12")
>>> sbx = pool.create() # finds a warm host (here or in another process), else boots oneحرر المسبح. العملية قابلة للتكرار.
بالنسبة إلى مجموعة أنشأناها، ينهي هذا الأمر جميع مهام المضيفين (وبالتالي جميع بيئاتها العازلة). أما بالنسبة إلى مقبض تم الاتصال به عبر connect()، فإنه يُطلق العملاء المحليين لـ HTTP فقط: فقد يكون المضيفون المشتركون يخدمون عملاء آخرين، لذا — تمامًا مثل Sandbox.connect() — يجب ألا يؤدي مغادرة كتلة with إلى تفكيكهم. قم بإنهاء مضيفي المجموعة المتصلة صراحةً باستخدام hf sandbox pool delete <id>.
يتم إلغاء المضيفات التي تعاملت معها فقط. فقد يكون المضيف المكتشف عبر التسميات يقدّم خدماته لصناديق رملية تابعة لعملية أخرى، لذا يتم تحريرُه بدلاً من إنهاءه.
يرفع SandboxError إذا تعذّر إلغاء مهمة مضيف، مع ذكر أسماء المهام التي لا تزال قيد التشغيل — إذ تستمر في الاحتساب، وتُحفظ إدخالات ذاكرتها المؤقتة لتبقى قابلة للاكتشاف. عند الوصول إلى close() عبر __exit__ مع وجود استثناء قيد التنفيذ بالفعل، يُسجَّل الفشل بدلاً من ذلك، حتى لا يُخفي الخطأ الأصلي.
اتصال
< source >( pool_id: strnamespace: str | None = Noneadopt_hosts: str = 'own'token: str | None = None )
المعاملات
- pool_id (
str) — المعرّف الذي يُعاد عند إنشاء المسبح لأول مرة. - namespace (
str، اختياري) — المجال الذي يتم البحث فيه عن مضيفي المجموعة (الافتراضي هو مجالك). - adopt_hosts (
str، اختياري، القيمة الافتراضية"own") — المضيفات التي يمكن إرفاقها. راجع SandboxPool. يتطلب إعادة الإرفاق بحوض بدأت مضيفاته من قبل عضو آخر في مساحة الأسماء استخدام"namespace". - token (
str، اختياري) — تجاوز رمز HF.
إعادة الاتصال بحوض قيد التشغيل عبر المعرّف، من أي جهاز — دون الحاجة إلى حالة محلية.
يجد مضيفًا قيد التشغيل يحمل التسمية pool_id ويعيد بناء إعدادات المجموعة (الصورة/النوع/الكثافة/خمول المضيف) من مواصفات متغيرات البيئة الخاصة بمهمة ذلك المضيف، ويعيد SandboxPool جاهزًا لاستدعاء create() لإنشاء المزيد من البيئات المعزولة — إما بتعبئة المضيفات قيد التشغيل، أو بتشغيل نسخة مكررة (بنفس الإعدادات) عند امتلائها.
يرفع SandboxError إذا لم يتم العثور على مضيف قيد التشغيل (تتوقف المجموعة عن الوجود بمجرد اختفاء جميع مضيفيها — إما بسبب انتهاء مهلة الخمول أو بسبب إيقافها).
إنشاء
< source >( env: dict[str, typing.Any] | None = Noneidle_timeout: int | float | str | None = 600forward_hf_token: bool = False )
المعاملات
- env (
dict[str, Any]، اختياري) — متغيرات البيئة لهذه البيئة المعزولة (تتمتع كل بيئة معزولة بمتغيراتها الخاصة). - idle_timeout (
intأوfloatأوstr، اختياري، القيمة الافتراضية600) — مهلة الخمول لكل بيئة معزولة — تُزال البيئة المعزولة من مضيفها بعد هذه المدة من عدم النشاط (لا توجد استدعاءات لواجهات برمجة التطبيقات، ولا توجد عمليات قيد التشغيل). وهي مختلفة عن مهلة الخمول الخاصة بالمضيف. مرّرNoneلتعطيلها. - forward_hf_token (
bool، اختياري، القيمة الافتراضيةFalse) — إذا كانت القيمة True، يتم حقن رمز HF الخاص بك كـHF_TOKENفي بيئة العزل (بانتساب اختياري). على عكسsecretsالخاص ببيئة عزل مخصصة، فإن متغيرات البيئة لبيئة العزل المشتركة تُسلَّم إلى الخادم المضيف عند الإنشاء (ولا تُخزَّن أبدًا في مهمة المضيف)، لذا فهي لا تظهر في بيانات وصفية أي مهمة.
أنشئ صندوق رمل واحدًا، مع توفير مضيف عند الحاجة.
يعيد استخدام مضيف لديه سعة متاحة (سواء كان من هذا المسبح، أو مضيف دافئ تم العثور عليه عبر وسوم المهمة / ذاكرة التخزين المؤقت المحلية) قبل تشغيل مضيف جديد، بحيث يكلف استدعاء create() على مضيف دافئ تقريبًا ذهابًا وإيابًا واحدًا. استدعه بشكل متكرر لتوزيع المهام؛ واستخدم warm_up (أو warm) لإعداد المضيفين مسبقًا وتجنب البدء البارد في الاستدعاءات الأولى. إذا امتلأ المضيف تحتنا (لأن عملية أخرى حشوته) أو اختفى المضيف المخزّن مؤقتًا، يُعاد وضع صندوق الرمل على مضيف آخر (أو مضيف جديد).
تأكد من أن num_hosts مضيفًا فارغًا قيد التشغيل واتركها تعمل. تُرجع معرفات مهام المضيفين في المجموعة.
يُستخدم لـ “إنشاء” مجموعة مسبقًا: حيث تحمل العُقد تسمية المجموعة وإعداداتها (في متغيرات البيئة الخاصة بها)، وبالتالي فإن استدعاء SandboxPool.connect(pool_id) لاحقًا (حتى من جهاز آخر) سيجدها ويطلق بيئات العزل دون بدء بارد. وتبقى العُقد محاسبةً حتى يتم إيقافها أو تصبح خاملة.
يتبنى العُقد التي تعمل بالفعل لهذا المسبح (عبر وسمات المهمة) قبل بدء التشغيل، بحيث يؤدي استدعاء warm() بعد connect() — أو استدعاء warm() متكرر — إلى رفع العدد إلى num_hosts بدلاً من تكرار العُقد النشطة والتجاوز عن max_hosts.
هياكل البيانات
SandboxCommandResult
فئة huggingface_hub.SandboxCommandResult
< source >( exit_code: int | Nonestdout: strstderr: strsignal: int | None = Nonetimed_out: bool = Falseduration_ms: int = 0 )
نتيجة أمر تم تنفيذه في بيئة معزولة باستخدام Sandbox.run().
SandboxProcess
فئة huggingface_hub.SandboxProcess
< source >( id: str | Nonepid: intcmd: typing.Union[str, typing.List[str]]_sandbox: Sandboxtag: str | None = Nonestarted_at_ms: int | None = Nonerunning: bool = Trueexit_code: int | None = None )
عملية خلفية تم تشغيلها في صندوق رمل باستخدام Sandbox.run()(..., background=True).
استعرض عمليات بيئة العزل باستخدام Sandbox.processes() وأوقف إحداها باستخدام SandboxProcess.kill().
تبقى العمليات التي اكتملت مؤخراً في القائمة (حيث يحافظ الخادم على عدد محدود منها)، لذا تُظهر running وexit_code ما إذا كانت العملية لا تزال نشطة أو أنها انتهت بالفعل (حتى لحظة إدراجها في القائمة).
إنهاء العملية في الخلفية. العملية قابلة للتكرار.
يعيد ما إذا كانت هذه الاستدعاء هي التي أوقفت العملية: False تعني أنها كانت قد انتهت بالفعل أو تم إنهاءها، وهذا ليس خطأً.
لاحظ أن أي فرع يفصل نفسه باستخدام setsid() يغادر مجموعة العمليات المُبلَّغ عنها ويبقى على قيد الحياة بعد انتهاء هذه الاستدعاء. احذف صندوق الرمل للتأكد من أن كل ما بدأه قد اختفى.
FileEntry
فئة huggingface_hub._sandbox.FileEntry
< source >( name: strpath: strtype: typing.Literal['file', 'dir', 'symlink']size: intmtime_ms: int | None = Nonemode: str = '' )
ملف أو مجلد داخل بيئة معزولة.
الأخطاء
SandboxError
فئة huggingface_hub.errors.SandboxError
< source >( message: strstatus_code: int | None = None )
استثناء أساسي لعمليات بيئة العزل (انظر إلى huggingface_hub.Sandbox).
SandboxCommandError
فئة huggingface_hub.errors.SandboxCommandError
< source >( cmdresult )
تُستدعى هذه الاستثناءات عندما ينتهي تنفيذ أمر داخل بيئة معزولة برمز غير صفري.