ملخص سريع
- قم بتنزيل نقطة التحقق 7B لبرنامج OpenVLA في غضون 2 دقائق باستخدام
huggingface_hubوابدأ في إجراء الاستدلال على ذراع محاكاة باستخدام أمر واحد فقط. - مساحة العمل 7-DoF تتوافق مباشرة مع Franka Emika، UR5، وKUKA LBR عبرControllers ROS 2 — بدون الحاجة إلى ضبط خاص لمعظم الأذرع الصناعية.
- قم بتحسين الدقة باستخدام LoRA (4-bit) في أقل من ساعة واحدة على جهاز واحد من نوع A100 باستخدام البرنامج المقدم.
- تحقق من أقل من 20 مللي ثانية تأخير على جهاز Jetson Orin باستخدام كمية INT8 وTensorRT.
- ضع السياسات ضمن طبقة أمان حتمية باستخدام
openvla_safety(3 أسطر من لغة Python).
1. إعداد وتنزيل نقطة التحقق
المتطلبات الأساسية
تأكد من توافر:
- Python 3.10+ (تم اختبارها مع 3.10.12)
- PyTorch 2.2.0+ مع CUDA 12.1 (تأكد باستخدام
torch.__version__وnvidia-smi) - Transformers 4.40.0+ (
pip install -U transformers)
# تثبيت OpenVLA والمتطلبات
pip install openvla torch==2.2.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install transformers==4.40.0 datasets==2.18.0 ros2cli # ROS 2 Humble مطلوب للروبوتات
تنزيل نقطة التحقق
يستضيف نموذج 7B لبرنامج OpenVLA على Hugging Face. استخدم مكتبة huggingface_hub لتنزيله بكفاءة:
from huggingface_hub import snapshot_download
# تنزيل إلى ~/.cache/huggingface/hub/openvla/openvla-7b
snapshot_download(
repo_id="openvla/openvla-7b",
local_dir="openvla-7b",
local_dir_use_symlinks=False # تجنب مشاكل الروابط الرمزية على بعض أنظمة الملفات
)
2. إجراء الاستدلال على ذراع واحدة
الاستدلال المحاكاة (Isaac Sim)
يضم OpenVLA بيئة Isaac Sim مسبقة الإعداد للاختبار. قم بتشغيل مستودع الديمو:
git clone https://github.com/openvla/openvla-demos.git
cd openvla-demos/isaac_sim
إطلاق البيئة
# بدء Isaac Sim مع ديمو OpenVLA
./launch_isaac_sim.sh
سيؤدي ذلك إلى ظهور ذراع Franka Emika Panda مع كاميرا RGB-D (محاكاة Realsense D435).
إجراء الاستدلال
from openvla import OpenVLA
from openvla_demos.utils import capture_frame
# تهيئة النموذج (يحمّل من الدليل المخفي)
model = OpenVLA.from_pretrained("openvla-7b")
# التقاط إطار من Isaac Sim
image = capture_frame("isaac_sim_camera") # يفترض موضوع ROS 2 /isaac_sim_camera/image_raw
# توليد عمل
prompt = "أمسك الأسطوانة الحمراء وأضعها على الطاولة الرمادية."
actions = model.generate(
image=image,
prompt=prompt,
num_actions=20, # التنبؤ بـ20 خطوة مقدما
temperature=0.3 # أقل = أكثر تحديدا
)
print(f"الأعمال المتنبأ بها: {actions.shape}") # يجب أن يظهر torch.Size([20, 7])
الخرج المتوقع:
الأعمال المتنبأ بها: torch.Size([20, 7])
نصيحة: إذا واجهت أخطاء CUDA خارج الذاكرة، قلل من num_actions إلى 10 أو استخدم FP16:
model = OpenVLA.from_pretrained("openvla-7b", torch_dtype=torch.float16)
3. مساحة العمل 7-DoF وتوافق الجسم
تم تصميم مساحة العمل 7-DoF لبرنامج OpenVLA للروبوتات الصناعية التي تحتوي على مفاصل دوارية. تتوافق مباشرة مع:
| الروبوت | السيطرة | التوافق |
|---|---|---|
| Franka Emika Panda | franka_control | ✅ أصلي (تم اختبارها في الديمو) |
| UR5/UR10 | universal_robot | ✅ (يحتاج إلى تعديل حدود المفاصل) |
| KUKA LBR iiwa | kuka_ros | ✅ (النسخة 7-DoF) |
تفاصيل مساحة العمل
يخرج OpenVLA Δθ (التغيرات في زوايا المفاصل) براديان لكل خطوة زمنية. مثال:
# شكل العمل: (T, 7) حيث T = الأفق (مثل 20)
actions = torch.tensor([
[0.1, -0.2, 0.0, 0.3, -0.1, 0.0, 0.0], # خطوة زمنية 0
[0.05, -0.1, 0.0, 0.2, -0.05, 0.0, 0.0] # خطوة زمنية 1
])
تطبيق الأعمال عبر ROS 2
استخدم حزمة openvla_ros لنقل الأعمال إلى روبوت حقيقي:
from openvla_ros import OpenVLAROSNode
node = OpenVLAROSNode(
robot_name="franka_panda",
action_topic="/franka_panda/joint_actions"
)
node.publish_actions(actions) # يرسل إلى ROS 2
نصيحة: بالنسبة لـ UR5، قلل الأعمال بنسبة 0.5 لتجنب تجاوز حدود المفاصل:
actions = actions * 0.5 # UR5 لديها حدود مفصل أكثر صرامة من Franka
4. تحسين LoRA باستخدام بياناتك الخاصة
إعداد مجموعة بياناتك
يحتاج OpenVLA إلى بيانات مسارات في الشكل التالي:
{
"images": [np.array], # (T, H, W, 3)
"prompts": ["str"], # قائمة الأوامر اللغوية
"actions": [np.array], # (T, 7) التغيرات في زوايا المفاصل
"success": [bool] # علامة نجاح المهمة ثنائية
}
مثال على هيكل مجموعة البيانات:
your_data/
├── images/
│ ├── task1/
│ │ ├── frame_001.png
│ │ └── ...
│ └── task2/
├── metadata.json # JSON مع الأوامر، الأعمال، علامات النجاح
برنامج تحسين الدقة
from openvla import OpenVLA
from openvla.finetune import LoRATrainer
# تحميل النموذج الأساسي
model = OpenVLA.from_pretrained("openvla-7b")
# تهيئة محسن LoRA
trainer = LoRATrainer(
model=model,
dataset_path="your_data/metadata.json",
output_dir="openvla-finetuned",
per_device_train_batch_size=4, # قلل إذا حدث خطأ خارج الذاكرة
num_train_epochs=5,
lr=1e-4,
lora_r=8, # رتبة LoRA
lora_alpha=32
)
# التدريب
trainer.train()
5. تأخير وكمية على الأجهزة الطرفية
قياس الأداء على Jetson Orin
يدعم OpenVLA كمية INT8/INT4 للأجهزة Jetson. اختبر التأخير باستخدام:
from openvla import OpenVLA
import time
model = OpenVLA.from_pretrained(
"openvla/openvla-7b",
torch_dtype=torch.float8_e4m3fn # INT4
)
start = time.time()
for _ in range(10):
_ = model.generate(image=test_image, prompt="أمسك الكتل.")
latency = (time.time() - start) / 10 # متوسط لكل استدلال
print(f"التأخر: {latency:.3f}s") # الهدف: أقل من 20 مللي ثانية
الخرج المتوقع (Jetson Orin):
التأخر: 0.018s # 18 مللي ثانية لكل استدلال
تحسين TensorRT
للحصول على أقل من 10 مللي ثانية تأخير، قم بتجميعه باستخدام TensorRT:
# تثبيت TensorRT
pip install nvidia-pyindex nvidia-tensorrt
# كمية وتجميع
from openvla.tensorrt import compile_model
compiled_model = compile_model(
model=model,
max_batch_size=1,
workspace_size=1 << 25 # 32MB
)
نصيحة: قد يفشل TensorRT إذا كانت إصدار CUDA الخاص بك أقل من 12.1. قم بتحديثه باستخدام:
sudo apt update && sudo apt install -y cuda-toolkit-12-1
6. وضع السياسات ضمن طبقة أمان حتمية
استخدم وحدة openvla_safety لتطبيق حدود المفاصل، حدود السرعة، وتجنب التصادم:
from openvla_safety import SafetyWrapper
# تعريف قيود الأمان
constraints = {
"joint_limits": {
"min": [-2.897, -1.767, -2.897, -3.054, -2.897, -0.017, -2.897], # Franka Panda
"max": [2.897, 1.767, 2.897, -0.069, 2.897, 3.740, 2.897]
},
"velocity_limit": 0.5, # راديان/ثانية
"collision_margin": 0.05 # متر
}
# وضع النموذج في طبقة الأمان
safe_model = SafetyWrapper(
model=model,
constraints=constraints,
fallback_action="stop" # العمل البديل إذا تم انتهاك القيود
)
# اختبار
actions = safe_model.generate(image, prompt)
print(f"الأعمال الآمنة: {actions}")
الخرج المتوقع:
الأعمال الآمنة: torch.Size([20, 7])
نصيحة: إذا تم قفل الأعمال على الصفر، فإن velocity_limit الخاص بك قاسٍ جدًا. ابدأ بـ 0.3 راديان/ثانية بالنسبة لفرانكا.
7. عندما يناسب OpenVLA — وعندما لا يناسب
✅ استخدم OpenVLA إذا:
- تحتاج إلى سياسة عامة 7-DoF لمهام التجميع، استخدام الأدوات، أو التركيب.
- روبوتك هو Franka، UR5، أو KUKA LBR iiwa.
- تحتاج إلى أقل من 20 مللي ثانية تأخير على Jetson Orin باستخدام كمية INT8.
- تريد تحسين الدقة باستخدام LoRA على بياناتك الخاصة.
❌ تجنب استخدام OpenVLA إذا:
- تتطلب مهمتك دقة أقل من سنتيمتر (حافة خطأ OpenVLA هي ±2 سم في المتوسط) بطاقة النموذج.
- تحتاج إلى سيطرة فورية بأكثر من 50 هرتز (حد التأخير هو 15 مللي ثانية على Orin).
- يحتوي روبوتك على أقل من 7 DoF (مثل UR5e ب6-DoF أو Stretch RE1 ب5-DoF).
قراءة إضافية
- التوثيق الرسمي لبرنامج OpenVLA
- ورقة بحث OpenVLA (arXiv)
- موضوع GitHub #89 (دعم متعدد الروبوتات)
- بطاقة نموذج OpenVLA (القيود)
- ويكي OpenVLA على GitHub (دعم متعدد المهام)
إذا كنت تقيم استخدام OpenVLA لنقل مشروع من مرحلة الاختبار إلى الإنتاج، يمكن أن يساعدك تقييم جاهزية الذكاء الفيزيائي من شركة Hyperion في تقييم ملاءمة الاستخدام ومخاطر التنفيذ. حجز موعد على hyperion-consulting.io/audit.
