English
CASE STUDY · WSL2

לינוקס שלם בתוך Windows - וכך הוא הציל אימון של מודל

סיפור אמיתי מלילה אחד: torch על Windows קרס שלוש פעמים באותה שורה בטעינת קובץ של 26GB - בשלוש גרסאות שונות, על קובץ שאומת ב-hash. הפתרון לא היה חומרה חדשה אלא WSL2: אותה מכונה, אותו כרטיס מסך, מערכת הפעלה שנייה שרצה לצד הראשונה.

מה זה WSL2 בעצם

Windows Subsystem for Linux הוא לינוקס אמיתי - קרנל אמיתי, Ubuntu אמיתית - שרץ בתוך מכונה וירטואלית קלה שמנוהלת על ידי Windows. לא dual-boot (אין ריסטארט לעבור), לא אמולציה (מהירות כמעט מלאה), לא החלפה של כלום.

Windows 11 - מערכת אחת מארחת
האפליקציות הרגילות
ComfyUI · הסטודיו · דפדפן
WSL2 · Ubuntu
קרנל לינוקס · venv · ai-toolkit
RTX 3060 - כרטיס אחד, משותף לשניהם (GPU passthrough, CUDA מלא)

שני עולמות, גשר ביניהם: מהלינוקס רואים את הדיסקים של Windows תחת /mnt/c, /mnt/d - ומ-Windows מריצים פקודות לינוקס עם wsl.

למה בכלל היינו צריכים את זה

הבעיה: טעינת משקלי מודל של 26.3GB קרסה ב-segfault בתוך torch_cpu.dll - ב-torch 2.6, 2.7.1 ו-2.8, עם ובלי כל דגל אפשרי. הקובץ עצמו תקין (SHA-256 אומת מול המקור). באג בבילד של torch ל-Windows, בלתי עביר מבחוץ.
ההיגיון: אותה ספרייה בדיוק מקומפלת ללינוקס בנפרד - נתיב קוד אחר לגמרי. אם הבאג בבילד, מערכת אחרת על אותה חומרה עוקפת אותו. וכך היה: בלינוקס אותה שורה נתנה שגיאה אינפורמטיבית במקום קריסה - ומשם כבר אפשר לתקן.

איך מתקינים - הדרך שעבדה באמת

שלושה שלבים. שימו לב לשלב 2 - המלכודת שרוב המדריכים לא מזכירים.

# 1 · הפעלת הרכיבים (PowerShell כמנהל) + ריסטארט
dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
shutdown /r /t 5

# 2 · המלכודת: wsl.exe המובנה הוא סטאב שדורש חלון אינטראקטיבי.
#     בהתקנה מרחוק/סקריפט - מתקינים את חבילת ה-MSI האמיתית מגיטהאב:
#     github.com/microsoft/WSL/releases  →  wsl.x.x.x.x64.msi
msiexec /i wsl_setup.msi /qn

# 3 · התקנת Ubuntu (בלי חלון, בלי חנות)
wsl --install -d Ubuntu --no-launch

איך ניגשים ועובדים

מה רוציםאיך
טרמינל לינוקסwsl -d Ubuntu
פקודה בודדתwsl -d Ubuntu -- ls /root
סקריפט שלםwsl -d Ubuntu -- bash /mnt/d/script.sh
קבצי Windows מהלינוקס/mnt/c/… · /mnt/d/…
קבצי לינוקס מ-Windows\\wsl$\Ubuntu\root\… בסייר הקבצים
כיבוי מלא (משחרר RAM/GPU)wsl --shutdown
כלל שנלמד בדם: פקודות מקוננות (ssh → cmd → wsl → bash) שוברות ציטוטים בשקט. תמיד לכתוב סקריפט לקובץ, להעביר אותו, ולהריץ bash /mnt/d/x.sh - אף פעם לא שרשרת מירכאות.

הכוונון שעשה את ההבדל

ברירת המחדל של WSL: חצי מה-RAM. לטעינת מודל ענק זה לא מספיק - הקובץ של C:\Users\<you>\.wslconfig שולט במשאבים:

[wsl2]
memory=26GB          # כמה RAM ה-VM מקבל
swap=40GB            # קובץ החלפה - גולש לדיסק כשנגמר
swapFile=D:\\wsl_swap.vhdx

(אחרי שינוי: wsl --shutdown כדי שייכנס לתוקף.)

המגבלה שתפגשו: הגשר ל-/mnt/d (פרוטוקול 9p) לא יודע לעשות memory-map לקבצים ענקיים. טעינת 26GB דרכו נכשלת - הפתרון: קריאה רגילה לזיכרון (read) במקום mmap, או העתקת הקובץ לדיסק הפנימי של הלינוקס.
העברת משתני סביבה (טוקנים וכד') מ-Windows ללינוקס - לפי שם, בלי לחשוף ערך: setx WSLENV HF_TOKEN/u - ומאותו רגע כל סשן WSL רואה את המשתנה.

השורה התחתונה

Windows nativeWSL2 על אותה מכונה
טעינת המודלsegfault ×3עוברת
אימון LoRAבלתי אפשרי26 שנ׳/צעד, 200MB מרווח VRAM
עלות-0 ₪ · שעתיים התקנה

ComfyUI והסטודיו ממשיכים לרוץ על ה-Windows כרגיל; הלינוקס מתעורר רק לאימון, לוקח את ה-GPU לכמה שעות, ומחזיר. מכונה אחת, שני עולמות, אפס פשרות.