APIهای ابری تا زمانی که راحت هستند، راحت‌اند؛ اما وقتی دیگر این‌طور نیستند، اوضاع تغییر می‌کند. صورت‌حساب ماهانه شما بالا می‌رود. تغییر قیمت، بودجه‌تان را به هم می‌ریزد. و جایی در بندهای ریز قرارداد، داده‌های اختصاصی شما در حال آموزش مدل شخص دیگری است. این اصطکاک باعث می‌شود توسعه‌دهندگان بیشتری به سمت ساخت ایستگاه‌های کاری هوش مصنوعی محلی (local AI workstations) بروند. شما سخت‌افزار را یک‌بار می‌خرید، مالکیت کامل پشته (stack) را دارید و دقیقاً تصمیم می‌گیرید چه داده‌ای از دستگاه شما خارج شود.

این هفته سه پیشرفت ملموس رخ داد که این تغییر رویکرد را عملی‌تر می‌کند: یک دستیار معاملاتی Dockerized که داده‌های مالی شما را در خانه نگه می‌دارد، یک راهنمای ساده برای به کنترل درآوردن GPUهای NVIDIA، و انتشار نسخه جدیدی از Hugging Face که یادگیری رباتیک را در دسترس دسکتاپ‌های معمولی قرار می‌دهد.

داده‌های معاملاتی خود را با Docker محلی نگه دارید

یک توسعه‌دهنده TradingSpy را عرضه کرده است؛ یک دستیار تحقیقاتی هوش مصنوعی محلی که مخصوص جریان‌های کاری معاملاتی ساخته شده است. به جای ارسال داده‌های بازار و لیست‌های نظارتی شخصی به یک نقطه پایانی (endpoint) از راه دور، همه چیز را درون یک کانتینر Docker روی سخت‌افزار خودتان اجرا می‌کنید.

داده‌های مالی از حساس‌ترین داده‌ها هستند. ترکیب سبد سهام (portfolio)، یادداشت‌های معاملاتی و موقعیت‌های تاریخی شما نباید در صورت امکان از طریق یک API شخص ثالث عبور کنند. اجرای مدل به‌صورت محلی، این ریسک را کاملاً از بین می‌برد. کانتینر وظیفه استنتاج (inference) را بر عهده دارد و داده‌های خام کارگزاری شما هرگز مجبور نیست از دستگاه خارج شود.

Docker همچنین مشکل پیچیده وابستگی‌ها (dependencies) را که پروژه‌های یادگیری ماشین پایتون را گرفتار کرده، حل می‌کند. پشته‌های معاملاتی اغلب کتابخانه‌های داده مانند pandas، ابزارهای تحلیل تکنیکال و موتورهای استنتاج شتاب‌یافته با GPU را با هم ترکیب می‌کنند. بدون جداسازی (isolation)، یک پروژه به CUDA 11.8 نیاز دارد، دیگری 12.1 می‌خواهد و سیستم پایه شما به گورستانی از متغیرهای محیطی (environment variables) متضاد تبدیل می‌شود. Docker هر گراف وابستگی را در تصویر (image) مخصوص به خود قفل می‌کند. شما آن را یک‌بار می‌سازید و به شکلی یکسان روی یک سرور Ubuntu بدون رابط گرافیکی (headless)، یک دسکتاپ ویندوز ۱۱ با WSL2، یا یک NAS کوچک در آزمایشگاه خانگی اجرا می‌شود. حتی می‌توانید دایرکتوری‌های داده محلی خود را به صورت bind-mount درون کانتینر متصل کنید تا فایل‌های شما روی سیستم فایل خودتان باقی بمانند در حالی که محیط اجرا تمیز می‌ماند.

در اینجا یک بحث هزینه نیز وجود دارد. APIهای LLM ابری بر اساس توکن هزینه دریافت می‌کنند. اگر در حال انجام اسکن پیش از بازار روی صدها نماد هستید و داده‌های قیمت، خلاصه‌ اخبار و شاخص‌های تکنیکال را به یک مدل می‌دهید، تعداد این فراخوانی‌ها به سرعت افزایش می‌یابد. یک مدل محلی هیچ شمارنده‌ای ندارد. هزینه اولیه یک GPU فقط یک‌بار دردناک است؛ اما صورت‌حساب API هر ماه دردناک خواهد بود.

درک محیط‌های NVIDIA GPU

انتقال از APIهای ابری به یک کارت NVIDIA محلی به سادگی نصب PyTorch و فراخوانی .to('cuda') نیست. یک منحنی یادگیری واقعی وجود دارد و درک آن، تفاوت بین یک اسکریپت تفننی و یک ایستگاه کاری قابل اعتماد را مشخص می‌کند.

APIهای ابری سخت‌افزار را پنهان می‌کنند. شما JSON می‌فرستید و JSON دریافت می‌کنید. در حالت محلی، شما مدیر سیستم هستید. شما به درایور صحیح، یک CUDA toolkit سازگار و نسخه‌ای از PyTorch که برای معماری GPU شما کامپایل شده باشد، نیاز دارید. سپس باید آن را به محیط زمان اجرا (runtime) خود متصل کنید، خواه این کار به معنای پیکربندی nvidia-docker برای کانتینرها باشد یا مدیریت LD_LIBRARY_PATH روی سخت‌افزار مستقیم (bare metal). هر لایه دارای یک نسخه (version tuple) است که باید مطابقت داشته باشد، و وقتی مطابقت ندارد، با خطاهای مبهم درباره کتابخانه‌های مفقود یا دستگاه‌های مقداردهی‌نشده مواجه می‌شوید.

پاداش این کار، کنترل مستقیم بر سخت‌افزار است. شما یاد می‌گیرید که حافظه GPU یک سقف سخت است. برخلاف RAM سیستم که سیستم‌عامل می‌تواند در آن swap و paging انجام دهد، تمام شدن VRAM معمولاً به معنای کرش کردن فرآیند آموزش یا شکست فوری یک دسته استنتاج (inference batch) است. این محدودیت شما را مجبور می‌کند به اندازه دسته‌ها (batch sizing)، آموزش با دقت ترکیبی (mixed-precision training) و پروفایلینگ حافظه فکر کنید. شما دیگر با محاسبات (compute) مانند یک سرویس نامحدود برخورد نمی‌کنید، بلکه با آن به عنوان یک منبع محدود که مدیریت می‌کنید، رفتار می‌کنید.

یک راهنمای مفید که این هفته بسیار مورد بحث قرار گرفته، با GPUهای سازمانی و مصرف‌کننده به عنوان یک گونه واحد برخورد می‌کند. چه از یک A100 در سطح مرکز داده استفاده کنید و چه از یک RTX 4070 معمولی، اصول تغییر نمی‌کنند. هر دو بر مدل برنامه‌نویسی CUDA یکسان تکیه دارند. هر دو از شما می‌خواهند که تنسورها (tensors) را به‌طور صریح به دستگاه منتقل کنید. هر دو اگر سعی کنید یک مدل چهارده گیگابایتی را روی یک کارت دوازده گیگابایتی تخصیص دهید، به یک شکل شما را جریمه می‌کنند. این درس‌ها قابل انتقال هستند. شما می‌توانید روی کارت موجود در دسکتاپ خود نمونه‌سازی کنید و اگر بعداً به سخت‌افزارهای بزرگ‌تر مهاجرت کردید، دقیقاً همان طرز فکر بهینه‌سازی را اعمال کنید.

LeRobot v0.6.0 رباتیک را به میز کار شما می‌آورد

Hugging Face نسخه 0.6.0 از LeRobot را منتشر کرد؛ فریم‌ورکی که همان کتابخانه‌های Transformers و Diffusers را که پشت چت‌بات‌ها و مولد‌های تصویر هستند، برای وظیفه‌ای بسیار متفاوت بازطراحی کرده است: یادگیری رباتیک. این مدل به جای پیش‌بینی کلمه یا پیکسل بعدی، با دریافت تصویر دوربین و یک دستور زبانی، حرکت موتور بعدی را پیش‌بینی می‌کند.

مدت‌هاست که رباتیک حوزه‌ای به نظر می‌رسد که تنها مختص آزمایشگاه‌های پربنیه با دسترسی به اتاق‌های ضبط حرکت (motion-capture) و خوشه‌های GPU صنعتی است. LeRobot این مانع را از میان برمی‌دارد. نسخه 0.6.0 نحوه طراحی، آموزش و ارزیابی سیاست‌های (policies) رباتیک را ساده‌تر می‌کند. شما می‌توانید در محیط شبیه‌سازی نمونه‌سازی کنید، معماری سیاست را اصلاح کنید و سپس بدون نوشتن هزاران خط کد کنترل سطح پایین، آن را به یک بازوی واقعی یا یک پایه متحرک منتقل کنید.

آنچه این نسخه را قابل توجه می‌کند این است که آن را برای GPUهای مصرف‌کننده (consumer GPUs) هدف قرار داده است. برای آزمایش، نیازی به یک رک سرور ندارید. یک کارت گرافیک مصرف‌کننده رده‌بالا می‌تواند سیاست‌هایی را آموزش دهد که به گیره‌ها و بازوهای واقعی تعمیم می‌یابند. این نشانه‌ای روشن است از اینکه مدل‌های با وزن‌های باز (open-weight) در حال خروج از فضای ابری و ورود به سخت‌افزارهای فیزیکی هستند. وزن‌ها روی درایو شما ذخیره می‌شوند. ربات دستورات را بدون نیاز به رفت و برگشت شبکه به یک API دریافت می‌کند. وقتی چیزی را که در دنیای واقعی حرکت می‌کند کنترل می‌کنید، مزایای مربوط به تأخیر (latency) و حریم خصوصی را نمی‌توان نادیده گرفت.

این موضوع همچنین طرز فکر شما را در مورد مرز بین نرم‌افزار و سخت‌افزار تغییر می‌دهد. سیاست‌های رباتیک پیش از این در مقالات علمی بودند، اما اکنون در مخازنی (repositories) قرار دارند که می‌توانید آن‌ها را کلون کنید، روی داده‌های حرکتی خودتان تنظیم دقیق (fine-tune) کنید و روی سخت‌افزاری که متعلق به خودتان است مستقر کنید.

پیروزی واقعی در کنترل است

ساختن یک پشته (stack) هوش مصنوعی محلی به معنای رد کردن فضای ابری از روی اصول نیست؛ بلکه به معنای انتخاب محل انجام محاسبات بر اساس ارزش‌های شماست. وقتی مدل‌ها را به صورت محلی اجرا می‌کنید، داده‌های شما روی درایوهای خودتان باقی می‌ماند. هزینه‌های شما از یک صورت‌حساب ماهانه غیرقابل پیش‌بینی، به یک سرمایه‌گذاری ثابت روی سخت‌افزار تغییر می‌کند. همچنین مهارت‌هایی کسب می‌کنید — مانند عیب‌یابی CUDA، پروفایل‌بندی VRAM و کانتینری کردن جریان‌های کاری — که از شما یک مهندس سیستم می‌سازد، نه فقط یک مصرف‌کننده API.

ابزارها آماده‌اند. مدل‌ها به اندازه کافی کوچک هستند که روی کارت‌های مصرف‌کننده جا شوند. تنها سوال باقی‌مانده این است که آیا می‌خواهید مالک این پشته باشید یا به اجاره کردن آن ادامه دهید.