מבוא: מדוע TensorRT-LLM שווה את בניית סוף השבוע שלך
אם אי פעם צפיתם במעבד גרפי שיושב על ניצול של 60% בזמן שה-LLM שלכם זוחל, אתם יודעים שיש ביצועים חינמיים שנותרו על השולחן. TensorRT-LLM הופך את מרווח הראש הזה לתפוקה: ליבות מאוחדות, תשומת לב מחולקת לדפים, כימות ואופטימיזציות ברמת הגרף שמורידות את זמן האחזור ומעלות את מספר הטוֹקֶנִים לשנייה. במדריך הוראות זה, נעבור מקצה לקצה - מהתקנה לבניית מנוע להגשה - כך שתוכלו לפרוס בביטחון הסקה מהירה וזולה יותר במעבדים גרפיים של NVIDIA.
הדרכה זו כתובה בסגנון מעשי ומכוון פתרונות. נשתמש במבנה מונחה שאלות עם פקודות ניתנות להעתקה, מכשולים נפוצים ונקודות החלטה עבור FP16 לעומת INT8, אצוות ואסטרטגיות מטמון KV. אנו גם נפנה למשאבים רשמיים לצלילות עמוקות יותר היכן שמתאים,,,.
מה תלמדו
- כיצד להגדיר את הסביבה עבור TensorRT-LLM
- כיצד להכין מודל (מ-Hugging Face או נקודות ביקורת) לבניית מנוע
- כיצד לבנות מנועי FP16/INT8 ולכוונן ביצועים
- כיצד להריץ הסקה באמצעות Python/C++ והגשת HTTP
- כיצד לבצע בדיקות ביצועים, אצוות ובאגים
למי זה מיועד
- מהנדסי ML הפורסים LLM על מעבדים גרפיים של NVIDIA
- מתרגלים המייעלים עלות/זמן אחזור בייצור
- בונים העוברים מ-PyTorch Transformers להסקה מותאמת מאוד
- מהו TensorRT-LLM ומתי כדאי להשתמש בו?
TensorRT-LLM היא מחסנית הסקה שמקמפלת מודלים של Transformer למנועי GPU "מותאמים מאוד". בהשוואה ל-PyTorch גולמי או זמני ריצה גנריים, בדרך כלל תקבלו:
- זמן אחזור נמוך יותר לכל טוֹקֶן
- תפוקה גבוהה יותר בגדלי אצווה גדולים
- יעילות זיכרון טובה יותר עם מטמון KV מחולק לדפים וכימות
השתמשו בו כשאתם רצים על מעבדים גרפיים של NVIDIA ואכפת לכם מביצועים ברמת ייצור. זה חשוב במיוחד עבור LLM המפענחים בלבד (לדוגמה, Llama, Mistral, Phi, BLOOM) ותרחישים כמו צ'אטבוטים, RAG ושירותי API עם QPS גבוה.
- דרישות מוקדמות והגדרת סביבה
דרישות ליבה
- מעבד גרפי NVIDIA עם יכולת חישוב עדכנית (לדוגמה, Ampere, Ada, Hopper)
- גרסאות CUDA ו-TensorRT תואמות, בתוספת מנהלי התקנים מתאימים
- Python 3.8+ וכלי בנייה אם מקמפלים ממקור
הערת גרסאות: בדוק תמיד את מטריצת התמיכה הרשמית של TensorRT והערות השחרור עבור גרסאות ותכונות CUDA/TensorRT תואמות לפני ההתקנה,,,.
אפשרויות התחלה מהירה
- מכולה: השתמשו במכולות של NVIDIA עם CUDA/TensorRT מותקנים מראש - הדרך המהירה ביותר להימנע מחוסר התאמות גרסאות.
- התקנה מקומית: בצעו את ההתחלה המהירה הרשמית עבור TensorRT בסיסי, ואז שכבו את TensorRT-LLM מעל,.
- הכנת המודל שלכם (Hugging Face → TensorRT-LLM)
מקורות נפוצים
- Hugging Face: גרסאות Llama/Mistral/BLOOM
- נקודות ביקורת מקומיות: כוונונים עדינים מותאמים אישית
רשימת בדיקה להכנה
- אשרו שארכיטקטורת המודל נתמכת על ידי TensorRT-LLM.
- הורידו משקלי מודל וטוקנייזר.
- במידת הצורך, המירו safetensors לפורמטים צפויים או ייצאו ל-ONNX באמצעות הסקריפטים של הפרויקט.
טיפ: ההתחלה המהירה הרשמית כוללת לעתים קרובות סקריפטים להבאת מודלים והמרה לצורה הביניים הנכונה. למעבר בסגנון הדרכה עם דוגמת BLOOM, עיינו במדריך של Dell על המרת LLM של Hugging Face ל-TensorRT-LLM.
- בניית מנוע TensorRT-LLM (הלב של זרימת העבודה)
מושגים שאתם צריכים לדעת
- מנוע: החפץ המקומפל והמותאם לחומרה שאתם טוענים להסקה.
- דיוק: FP16/BF16 עבור קו בסיס חזק; INT8 או FP8 לתפוקה גבוהה יותר אם הדיוק נשמר.
- מטמון KV: מטמון KV מחולק לדפים מפחית פיצול זיכרון ומגביר את ביצועי ההקשר הארוך.
שלבים ברמה גבוהה
- הגדירו תצורת בנייה: אצווה מקסימלית, אורכי רצף, דיוק, כימות וארכיטקטורת GPU.
- הצביעו על נקודות הביקורת והטוקנייזר של המודל שלכם.
- קמפלו את המנוע עבור ה-GPU(ים) שלכם.
עיון: בניית מנועים עם מסמכים ותצורות רשמיים. אם אתם מתכננים להגיש באמצעות Hugging Face Text Generation Inference (TGI), עיינו בהערות הקצה האחורי של TRT-LLM על קמפול מראש של מנועים לכל ארכיטקטורת GPU ותצורה.
עץ החלטות למתחילים
- בנייה ראשונה: FP16, אורך רצף מקסימלי בינוני (לדוגמה, 4K–8K), אצווה מתונה (לדוגמה, 4–8). אשרו נכונות.
- הגדלת קנה מידה: הפעילו מטמון KV מחולק לדפים. הגדילו את גדלי האצווה/אלומה המקסימליים. התנסו עם FP8 או INT8.
- ייצור: הצמידו תצורות העומדות ב-SLO של זמן האחזור/QPS; צרו מנועים נפרדים לכל תרחיש (הנחיות קצרות לעומת הקשר ארוך).
- הפעלת הסקה: Python, C++ ו-HTTP
יש לכם שלושה נתיבים נפוצים:
- Python: יצירת אב טיפוס מהירה, אידיאלית עבור צינורות ומחברות.
- C++: ביצועים מרביים, שילוב בשירותים מקומיים.
- הגשת HTTP: השתמשו ב-TGI עם הקצה האחורי של TRT-LLM או בדוגמאות ההגשה של זמן הריצה לפריסה ניתנת להרחבה.
קצה אחורי של Hugging Face TGI
- קמפלו מראש מנועים עבור הגדרת ה-GPU/דיוק המדויקת שלכם.
- הפעילו TGI עם הקצה האחורי של TRT-LLM והצביעו עליו בספריית המנועים.
- שלחו בקשות באמצעות /generate או נתיבים תואמי openai והגדילו את קנה המידה עם עותקים משוכפלים.
- כוונון ביצועים שמזיז את המחט
מאיפה להתחיל
- דיוק: FP16 הוא קו הבסיס האמין שלכם. INT8/FP8 יכולים לקצץ את זמן האחזור עוד יותר, אך אשרו איכות.
- אצוות: אצוות דינמית ואיחוד בקשות מגדילים באופן דרמטי את התפוקה; מדדו זמן אחזור זנב.
- מטמון KV מחולק לדפים: חיוני להנחיות ארוכות והזרמה; מפחית לחץ זיכרון.
- אורכים מקסימליים: אורכי רצף מקסימליים גדולים יותר מגדילים את גודל המנוע ועשויים להפחית את השעון; בנו מנועים מתאימים למטרה.
טיפים מעשיים
- בצעו בדיקות ביצועים עם הנחיות מציאותיות: מדדו שלבי מילוי מראש לעומת פענוח בנפרד.
- התפוקה של טוקנייזר חשובה: עשו זאת על GPU אם המסגרת שלכם תומכת בכך.
- שימו עין על גרפי CUDA/ליבות מאוחדות: הן מפחיתות את התקורה של CPU ואת זמן האחזור של הפעלת ליבה.
- עבור ריבוי GPU: העדיפו מקביליות טנסורים או מקביליות צינורות בהתאם לגודל המודל ולדרישות זמן האחזור שלכם.
- בדיקת ביצועים: הוכחת הניצחון
רשימת בדיקה
- טוֹקֶנִים/שנייה (תפוקה) בגדלי אצווה יעד
- זמן לטוֹקֶן הראשון (TTFT) וזמן אחזור מקצה לקצה לכל בקשה
- ניצול GPU ומרווח ראש זיכרון תחת QPS שיא
- דיוק: BLEU/מורכבות או evals ספציפיים למשימה אם אתם מכמתים
השתמשו בזרעים ובערכות הנחיות עקביים על פני קווי בסיס (PyTorch לעומת TensorRT-LLM) כדי לאמת נכונות ודלתאות.
- גרסאות לא תואמות: יישרו גרסאות CUDA, מנהלי התקנים ו-TensorRT לפי מטריצת התמיכה הרשמית.
- מנוע לא חוקי עבור מכשיר: בנו מחדש מנועים במיוחד עבור ארכיטקטורת ה-GPU שלכם.
- OOM במהלך הבנייה: הפחיתו אורך רצף או אצווה מקסימליים; הפעילו KV מחולק לדפים; שקלו כימות.
- ירידה בדיוק עם INT8: כיילו על נתונים מייצגים של תחום; נסו כימות לכל טנסור ואמתו רגישות שכבה אחר שכבה.
- TTFT איטי למרות תפוקה גבוהה: כוונו מטמון KV מחולק לדפים, הפעילו גרפי CUDA ובדקו צווארי בקבוק של טוקנייזר.
- זרימת עבודה לדוגמה: ממודל Hugging Face לייצור
תרחיש: אתם רוצים מודל צ'אט עם זמן אחזור נמוך על A100.
- בחרו מודל: גרסת Llama/Mistral של 7B–13B.
- הכינו: הורידו משקלים וטוקנייזר; ודאו שארכיטקטורה נתמכת.
- מנוע ראשון: FP16, קלט מקסימלי 4K, פלט מקסימלי 1K, אצווה 4; KV מחולק לדפים מופעל.
- אמתו: השוו פלטים עם קו הבסיס של PyTorch.
- יַעֲלוּ: נסו INT8 או FP8; מדדו TTFT ותפוקה. הגדילו את האצווה עבור מצב שרת.
- הגישו: השתמשו בקצה האחורי של TGI TRT-LLM; הגדילו את קנה המידה של עותקים משוכפלים מאחורי מאזן עומסים; הוסיפו הזרמה.
- תפוקה לכל GPU: מדדו טוֹקֶנִים/שנייה בהקשר היעד שלכם. השתמשו בכך כדי לחשב את קיבולת ה-QPS.
- מחיר למיליון טוֹקֶנִים: עם פענוח מהיר יותר וניצול אצווה גבוה יותר, TRT-LLM בדרך כלל מוריד את העלות לכל טוֹקֶן.
- הגדילו את גודל המנועים הנכון: בנו מנועים נפרדים עבור צורה קצרה וארוכה כדי למזער בזבוז מרווח ראש.
- שאלות נפוצות בתוך המדריך
ש: האם אני צריך לבנות מחדש מנועים עבור כל סוג GPU?
ת: כן. מנועים ספציפיים לחומרה. בנו עבור כל ארכיטקטורת GPU שתפרסו עליה.
ש: כמה INT8 משפיע על האיכות?
ת: זה תלוי במודל ובמשימה. עם נתוני כיול טובים, מודלים רבים שומרים על איכות קרובה ל-FP16 תוך מתן האצות משמעותיות.
ש: האם אני יכול להריץ הקשרים ארוכים (לדוגמה, 32K)?
ת: כן, אבל תכננו זיכרון בזהירות. השתמשו במטמון KV מחולק לדפים וכוונו גדלי בלוקים; שימו לב שהקשרים ארוכים יותר מגדילים את טביעת הרגל של המנוע ואת עלות הפענוח.
ש: האם TGI נדרש?
ת: לא. אתם יכולים להריץ Python/C++ ישירות. TGI נוח עבור ממשקי API של HTTP ברמת ייצור עם שינוי קנה מידה אוטומטי ורישום.
ראוי לציין להאצת זרימת עבודה
אם אתם חוזרים בתדירות גבוהה על הנחיות, משווים פלטים בין מנועים או מתעדים ניסויים, עוזר AI זה לצד זה שתומך בניסיונות חוזרים מהירים, ביצוע בלוק קוד וקטעי אינטרנט יכול להאיץ את הלולאה שלכם. אגב, Sider.AI מציעה חוויית שולחן עבודה מותאמת למהנדסים - שימושית ללכידת מדדי ביצועים, בדיקת הנחיות וארגון ההערות שלכם בזמן שאתם מייעלים את צינור TensorRT-LLM שלכם. רשימת בדיקה לשלבים הבאים
- קראו את ההתחלה המהירה הרשמית כדי לאמת את הסביבה שלכם.
- אשרו תאימות CUDA/TensorRT במטריצת התמיכה.
- עקבו אחר מדריך בניית המנועים ובחרו תחילה FP16.
- אם אתם מגישים באמצעות TGI, קמפלו מראש מנועים והגדירו את הקצה האחורי של TRT-LLM.
- אופציונלי, סקרו מעבר בסגנון הדרכה עבור מודלים של Hugging Face כמו BLOOM.
נקודות עיקריות
- TensorRT-LLM מקמפל את ה-Transformer שלכם למנוע מקורי של GPU לתפוקה מרבית ולזמן אחזור נמוך יותר.
- התחילו עם FP16, הפעילו מטמון KV מחולק לדפים ומדדו. לאחר מכן חקרו INT8/FP8 למהירות נוספת.
- מנועים ספציפיים ל-GPU ולתצורה; בנו לכל יעד פריסה.
- לייצור, שלבו מנועים עם שכבת הגשה חזקה (לדוגמה, TGI) ונטרו TTFT, תפוקה ואיכות.
שאלות נפוצות
ש1: כיצד להתקין ולהגדיר את TensorRT-LLM בצורה הנכונה?
השתמשו במכולה עם CUDA/TensorRT תואמים או עקבו אחר ההתחלה המהירה הרשמית ומטריצת התמיכה כדי להימנע מסחיפת גרסאות. אשרו מנהלי התקן של GPU וכלי בנייה לפני קמפול מנועים.
ש2: כיצד להשתמש ב-TensorRT-LLM עם מודלים של Hugging Face?
הורידו את המודל והטוקנייזר, ודאו תמיכה והמירו לפי הצורך לפני בניית המנוע. אם אתם מגישים עם TGI, קמפלו מנועים עבור ה-GPU שלכם והפנו את הקצה האחורי לספריית המנועים.
ש3: האם עלי לבחור FP16, FP8 או INT8 עבור TensorRT-LLM?
התחילו עם FP16 ליציבות, ואז נסו FP8/INT8 כדי להגדיל את התפוקה. אשרו תמיד את דיוק המשימה לאחר כימות.
ש4: האם אני יכול להגיש את TensorRT-LLM באמצעות HTTP?
כן. אתם יכולים להשתמש ב-Python/C++ ישירות או להגיש באמצעות הקצה האחורי של TRT-LLM של Hugging Face TGI עבור ממשקי API ניתנים להרחבה ומוכנים לייצור עם הזרמה.
ש5: מהם צווארי הבקבוק הנפוצים בביצועים בעת שימוש ב-TensorRT-LLM?
תקורה של טוקנייזר, אצוות לא אופטימלית וחוסר במטמון KV מחולק לדפים הם בעיות נפוצות. כוונו את גדלי האצווה, הפעילו גרפי CUDA ונטרו TTFT לעומת טוֹקֶנִים לשנייה כוללים.