Практичні зауваження: ваша модель ШІ (LLMs) не працює на Python
Покрокове керівництво з практичних нотаток: ваша модель ШІ (LLM) не працює на Python: контракти, перевірки та готові блоки коду для команд, які використовують цю схему.
Наступні примітки описують практичний підхід до вирішення проблеми „Ваша модель ШІ (LLM) не працює на Python“. Основна увага приділяється контрактам, перевіркам та місцям для вставки коду, а не мотиваційним аспектам. Під час роботи на етапі огляду спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Записуйте час виконання та витрати на токени або запити поруч із функціональними результатами. Відображення витрат заздалегідь запобігає несподіваним рахункам під час переходу від демо-версії до спільних середовищ.
output = model(input)
Почнемо з чогось простого
Підхід «Давайте почнемо з етапних робіт» найкраще працює, якщо його розглядати як вимірювану поверхню. Запишіть один ідеальний приклад роботи, один випадок збою та примітки щодо скасування змін перед розширенням обсягу робіт. Зберігайте конфігурацію окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Забезпечте фіксацію версії інтерпретатора та файлу з блокуванням залежностей перед тим, як пояснювати принцип роботи циклів. Розбіжності між ноутбуком та системою CI є найпоширенішою причиною прихованих збоїв у демонстраціях API.
Input
↓
Matrix Multiplication
↓
ReLU
↓
Matrix Multiplication
↓
Output
y = relu(x @ W + b)
relu()
x @ W
Шлях
Етап тестування подорожі найкраще функціонує, якщо його розглядати як вимірювану поверхню. Запишіть один ідеальний результат, один випадок збою та примітку про скасування змін перед розширенням обсягу тестування. Документуйте як успішний, так і відновлювальний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Збережіть конфігурацію інтерпретатора та файли блокування залежностей перед початком тестування циклів. Розбіжності між ноутбуком та середовищем CI є найпоширенішою причиною прихованих збоїв під час демонстрацій API.
AI Model
↓
PyTorch / TensorFlow
↓
Computational Graph
↓
Intermediate Representation (IR)
↓
Optimisations
↓
Lowering
↓
Hardware-specific Code
↓
Machine Instructions
↓
CPU / GPU / NPU
Крок 1: ви пишете код на Python
Етап „Крок 1“, який ви описуєте, працює найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний запис виконання, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед об’ємними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на складну ієрархію процесів. Забезпечте фіксацію версії інтерпретатора та файлу блокування залежностей перед тим, як пояснювати принцип роботи циклів. Розбіжності між ноутбуком та середовищем CI є найпоширенішою причиною „тихих“ збоїв під час демонстрацій API. Етап „Крок 1“, який ви описуєте, працює найкраще, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний запис виконання, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити разом із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демонстрації до спільних середовищ.
y = torch.relu(x @ W + b)
Крок 2: Модель перетворюється на граф
На етапі 2 – стадії моделювання – необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Конфігурацію слід тримати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь граф. Необхідно розділити процес створення клієнта від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови.
y = relu(x @ W + b)
Етап 3: Оптимізація
На етапі оптимізації кроку 3 необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Необхідно документувати як шлях успішного виконання, так і шлях відновлення. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої доробки. Необхідно розділити створення клієнта від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови.
MatMul
↓
Add
↓
ReLU
Крок 4: Проміжна репрезентація
На етапі проміжної репрезентації кроку 4 необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не намагаючись вгадати прихований стан. Краще використовувати невеликі, тестирувані одиниці замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану структуру обробки. Розділіть процес створення клієнта від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови. На етапі проміжної репрезентації кроку 4 необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не намагаючись вгадати прихований стан. Записуйте час виконання та витрати на обробку токенів чи запитів разом із функціональними результатами. Відображення витрат на ранньому етапі запобігає несподіваним рахункам під час переходу з демо-режиму.
до спільних середовищ.Source Code
Machine Code
variables
functions
loops
tensors
shapes
matrix operations
convolutions
attention
memory layouts
Крок 5: Зниження рівня
Під час виконання кроку 5 «Зниження рівня» спочатку запишіть умови контракту: необхідні вхідні дані, сигнал про успіх та те, що відбувається у разі часткової невдачі. Такий перелік допомагає зберігати чесність пізніших змін у коді. Зберігайте конфігурацію окремо від коду додатку. Файли середовища, сховища секретних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Фіксуйте ідентифікатор запиту, ідентифікатор моделі та час відгуку при кожному виклику. Без цих записів періодичні помилки постачальника виглядають як баги додатку.
High-level ML operation
↓
Tensor operation
↓
Lower-level operation
↓
Hardware-oriented operation
↓
Machine instructions
Крок 6: Нарешті вступає в дію апаратне забезпечення
Під час виконання кроку 6 «Етап апаратного забезпечення» спочатку запишіть умови функціонування: необхідні вхідні дані, сигнал про успішне виконання та те, що відбувається у разі часткової несправності. Такий перелік допоможе зберегти чесність пізніших змін у коді. Одночасно задокументуйте шлях успішного виконання та шлях відновлення. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Записуйте ідентифікатор запиту, ідентифікатор моделі та час затримки при кожному виклику. Без цих записів періодичні помилки постачальника виглядають як баги програми.
model(input)
y = relu(x @ W + b)
То куди подівся Python?
Під час роботи над питанням «Де знаходиться стадія обробки в Python?», спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Віддавайте перевагу невеликим, тестованим одиницям коду перед величезними скриптами. Коли якась крок обробки зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій. Записуйте ідентифікатор запиту, ідентифікатор моделі та час виконання за кожен виклик. Без цих даних періодичні помилки постачальника виглядають як баги програми. Під час роботи над питанням «Де знаходиться стадія обробки в Python?», спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Записуйте час виконання та витрати на токени або запити поруч із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-середовищ до спільних.
Штучний інтелект — це не лише моделі
Штучний інтелект працює найкраще не лише тоді, коли його розглядати як вимірювану поверхню. Запишіть один ідеальний приклад роботи, один випадок збою та примітки щодо скасування змін перед розширенням обсягу завдань. Зберігайте конфігурацію окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Забезпечте фіксацію версії інтерпретатора та файлу блокування залежностей перед запуском циклів. Розбіжності між ноутбуком та системою CI є найпоширенішою причиною прихованих збоїв у демонстраціях API.
Data → Model → Prediction
Model
↓
Compiler
↓
Hardware
Чому компаніям з ШІ потрібні компілятори?
Проблему того, чому компанії з ШІ найкраще працюють, якщо їхню діяльність розглядати як вимірювану поверхню, найкраще проаналізувати. Зафіксуйте один ідеальний результат, один випадок невдачі та примітки щодо скасування змін перед розширенням обсягу роботи. Документуйте як успішний, так і відновлювальний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої доробки. Збережіть конфігурацію інтерпретатора та файли блокування залежностей перед тим, як почнете роботу з циклів. Розбіжності між ноутбуком та системою CI є найпоширенішою причиною прихованих збоїв під час демонстрацій API.
WHAT
The ML model wants to compute
HOW
A specific piece of hardware should execute it efficiently
Та частина, яка здалась вам найцікавішою
Етап, який ви знайшли, працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед величезними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій. Забезпечте фіксацію версії інтерпретатора та файлу блокування залежностей перед тим, як пояснювати принцип роботи циклу. Різниця між версіями на ноутбуку та в середовищі CI є найпоширенішою причиною прихованих збоїв у демонстраціях API. Етап, який ви знайшли, працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити разом із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демонстрації до спільних середовищ.
Source Code
↓
Lexer
↓
Parser
↓
AST
↓
IR
↓
Optimisation
↓
Machine Code
ML Model
↓
ML Representation
↓
ML IR
↓
Optimisation
↓
Lowering
↓
Hardware Code
І тепер у вас є нове запитання
Щоб тепер у вас була сцена для реалізації, необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Конфігурацію слід тримати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функціоналу мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь граф. Розділіть створення клієнта від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови.
Simple ML Language
↓
Parser
↓
ML AST
↓
ML IR
↓
Simple Optimiser
↓
Lowering
↓
LLVM / Backend
Останні думки
На етапі остаточних роздумів необхідно визначити вхідні дані, відповідальну особу за крок та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не намагаючись вгадати прихований стан.
model(input)
Чек-лист операцій
На етапі чек-листу операцій також потрібно визначити вхідні дані, відповідальну особу за крок та критерії завершення перед зміною коду. Оператори мають можливість знову виконати крок з відомої точки контролю без необхідності вгадування прихованого стану.
Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Дайте назви кожним елементам, визначте критерії успіху та не допускайте мовчазного часткового виконання.
Відокремте процес створення контенту клієнтом від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови.
Зберігайте у кеші стабільні інструкції системи та схеми інструментів. Повторна передача ідентичних даних є поширеною причиною витрат ресурсів.
Фіксуйте версії залежностей та записуйте хеш-значення зображень, які використовувалися під час демонстрації. Відтворюваність краща за індивідуальні знання спеціалістів.
Одночасно задокументуйте оптимальний та резервний сценарії роботи. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації.
Перш ніж запускати стек у продакшн, заморозьте версії, створіть «золотий» запис для критичного шляху та підтвердьте кроки для скасування змін. У спільних середовищах необхідні обмеження на частоту запитів, перевірки прав доступу та чіткий власник для зміни секретів. Віддавайте перевагу надійності перед креативними одноразовими демонстраціями.
Примітка до запису 3443330c9254: не включайте ключі постачальника до репозиторію, встановіть ліміт токенів на сеанс та зберігайте записи поруч із фіксами для оцінки, щоб подальша заміна моделей залишалася порівнянною.