GaiaExGaiaEx
Модельді бақылауға арналған TensorFlow, Keras және TensorBoard
ӘзірлеушіAI & ML12 min read

Модельді бақылауға арналған TensorFlow, Keras және TensorBoard

Google-дың ML фреймворкі және оның қуатты визуализация тақтасы

Жазбаларды бөлісу

TensorFlow экожүйесі: фреймворктен көп нәрсе

TensorFlow, Google Brain әзірлеп, 2015 жылы шығарылған, тек терең оқыту кітапханасы емес — ол кез келген масштабта модельдер құру, оқыту, орналастыру, және бақылау үшін бүтін экожүйе. PyTorch зерттеуде басым болса, TensorFlow өнім қуат көзі болып қалады, Google, Airbnb, Twitter, және мыңдаған басқа компанияда күн сайын миллиардтаған болжам өндейтін жүйелерде орналастырылған.

Экожүйе бүкіл ML өмірлік циклын қамтиды:

  • Keras — модельдер құру мен оқытудың жоғары деңгейлі API-і, қазір толықтай TensorFlow-ге tf.keras ретінде интеграцияланған
  • TensorBoard — оқытуды бақылауға, эксперименттерді салыстыруға, және модельдерді дебагтеуге арналған визуализация құралы
  • tf.data — үлкен деректер жиынтығын модельдерге беруге арналған жоғары өнімді деректер құбырлары
  • TensorFlow Serving — версиялау, топтастыру, және аппараттық үделдетумен өнімдік деңгейдегі модель қызмет көрсету
  • TensorFlow Lite — мобильді және шеттік құрылғылар үшін оптимизацияланған орындау ортасы
  • TensorFlow.js — модельдерді тікелей браузерде жүргізу

Бұл кендік TensorFlow-нің ең күшті артықшылығы. Сіз модельді Jupyter блокнотында Keras-пен прототиптей аласыз, GPU кластерінде оны оқи аласыз, оқу процесін TensorBoard-пен бақылай аласыз, оны TF Serving-пен API артында қызмет көрсете аласыз, және сығылған нұсқаны Raspberry Pi-ге орналастыра аласыз — бәрі бір фреймворк ішінде. GaiaEx-тің API-іне қосылған бұлттық сауда қозғалтқышында да, зерттеу үшін жеке жұмыс станциясында да модель жүргізу керек болатын қаржы қолданбалары үшін, бұл икемділік маңызды.

TensorFlow ML өмірлік циклы (жеңілдетілген) Дерек Keras Оқыту TB логтар Қызмет / шет Артефакттарды стандарттасаңыз (SavedModel), сол граф зерттеу блокнотын да, өнімді де қоректендіре алады. tf.data кубырлары GPU-ды қоректендіріп ұстайды; TF Serving токтаусыз модель версиялайды
Прототиптеу, оқыту, бақылау, орналастыру — бір стек, көп орындау орталары.

Keras: модель құруға Sequential және Functional API-лар

Keras бір жетекші принциппен жобаланды: нейрондық желілер құрудың танымдық жүктемесін азайту. Ол екі модель-құру API-і арқылы қол жетеді, әрқайсысы түрлі күрделілік деңгейіне сай.

Sequential API — ең қарапайымы: деңгейлердің сызықтық стегі:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Dense(128, activation="relu", input_shape=(20,)),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(64, activation="relu"),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(1, activation="sigmoid"),
])

Бірнеше кірісі, бірнеше шығысы, ортақ деңгейлері, немесе секіру байланысы бар модельдер үшін, Functional API сізге граф-деңгейіндегі толық бақылауды береді:

price_input = keras.Input(shape=(60, 5), name="price_sequence")
meta_input = keras.Input(shape=(10,), name="metadata")

x = keras.layers.LSTM(64, return_sequences=True)(price_input)
x = keras.layers.LSTM(32)(x)

combined = keras.layers.concatenate([x, meta_input])
combined = keras.layers.Dense(64, activation="relu")(combined)
output = keras.layers.Dense(1, activation="sigmoid")(combined)

model = keras.Model(inputs=[price_input, meta_input],
                    outputs=output)

Бұл модель екі кіріс алады — қатпарланған LSTM-мен өнделетін 60-кадамдық баға тізбегі, және статикалық белгілер векторы — оларды біріктіреді, және бағыттық болжам шығарады. Бұл архитектура қаржы ML-де кең таралған, онда сіз уақытша үлгілерді (жақында баға қозғалысы) контекстік ақпаратпен (тұрақсыздық режимі, қаржыландыру мөлшерлемесі, апта күні) қосып алғысыз келеді.

Қаржы қолданбалары үшін маңызды деңгей түрлері: кестелік белгілер үшін Dense, уақыт тізбектері үшін LSTM және GRU, жергілікті уақытша үлгілерді үйренуге Conv1D, және трансформер-стиліндегі тізбек модельдеу үшін MultiHeadAttention.

Модельдерді компиляциялау және ақылдырақ оқу үшін callback-тер

Құрылғаннан кейін, Keras моделі үш құрамдастырушымен компиляциялануы керек: оптимизатор, шығын функциясы, және бағалау метрикалары.

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=1e-3),
    loss="binary_crossentropy",
    metrics=["accuracy", keras.metrics.AUC(name="auc")],
)

history = model.fit(
    X_train, y_train,
    epochs=100,
    batch_size=64,
    validation_data=(X_val, y_val),
    callbacks=[...],
)

Callback-тер — оқу кезінде нақты нүктелерде — әрбір эпохадан, топтамадан кейін, немесе белгілі бір жағдайлар орындалғанда — орындалатын ілгектер. Олар басқа түрде қолмен бақылауды талап ететін оқу басқаруын автоматтандырады:

  • EarlyStopping — валидация шығыны patience эпоха бойы жақсармаса, оқуды тоқтатады. Артық оқытуды және ысырап есептеуді алдын алады. Ең жақсы бақылау нүктесіне автоматты түрде қайтуға restore_best_weights=True орнатыңыз.
  • ModelCheckpoint — валидация өнімділігі жақсарған сайын моделді сақтайды. Ең жақсы моделді оқу құлауынан немесе кейінгі эпохалардағы артық оқытудан жоғалтпаңыз.
  • ReduceLROnPlateau — валидация шығыны тұрақсыз (plateau) болғанда оқу жылдамдығын азайтады. Бұл жиі бекітілген оқу жылдамдығы жіберіп алатын қосымша өнімділікті ашады — модель бастапқыда үлкен қадамдар жасайды, содан кейін шағын қадамдармен нәзіктейді.
callbacks = [
    keras.callbacks.EarlyStopping(
        monitor="val_loss", patience=15,
        restore_best_weights=True),
    keras.callbacks.ModelCheckpoint(
        "best_model.keras", monitor="val_auc",
        mode="max", save_best_only=True),
    keras.callbacks.ReduceLROnPlateau(
        monitor="val_loss", factor=0.5,
        patience=5, min_lr=1e-6),
    keras.callbacks.TensorBoard(log_dir="./logs"),
]

EarlyStopping және ModelCheckpoint-ті әрдайым бірге қолданыңыз. Қаржы моделін тым көп эпоха оқу дерлік артық оқытуға кепілдендіреді — модель оқу деректеріндегі шуылды жаттай бастайды. Бұл екі callback дұрыс уақытта тоқтап, дұрыс салмақтарды сақтауыңызды қамтамасыз етеді.

TensorBoard: оқу мен модельдерді дебагтеуді визуализациялау

TensorBoard — TensorFlow-нің визуализация құралы, және ол кез келген ML тәжірибешінің жұмыс ағынындағы ең құндылы құралдардың бірі — TensorFlow, PyTorch, немесе JAX қолдансаңыз да. Ол шикі оқу логтарын модельдің ішінде не болып жатқанын ашатын интерактивті бақылау тақтайшаларына айналдырады.

TensorBoard-ты лог каталогына бағыттап іске қосыңыз:

# Терминал
tensorboard --logdir=./logs --port=6006

# Немесе Jupyter блокнотында
%load_ext tensorboard
%tensorboard --logdir ./logs

Қаржы модель дамыту үшін маңызды визуализациялар:

Скалярлар — уақыт бойынша сызылған оқу және валидация шығын қисықтары. Олардың арасындағы алшақтық артық оқытуды ашады: валидация шығыны артқанда, оқу шығыны төмендеп жатса, модель шуылды жаттап алғаны дегені. Сау оқу екі қисықтың бірге төмендеп, валидация қисығы оқудан шамалы жоғары тұруымен көрінеді.

Гистограммалар — деңгейлер және эпохалар бойынша салмақтар, ығыстырулар (biases), және активациялардың таралуы. Салмақ таралуы нольге құлап түсуді (жоғалатын градиенттер), үлкен мәнге секіруді (тұрақсыз оқу), немесе активациялардың 0 не 1-де қағанаттануын (өлі нейрондар) бақылап отырыңыз. Бұл мәселелер шығын қисықтарында көрінбейді, бірақ гистограммаларда анық.

Ендірмелер (embeddings) — жоғары өлшемді көріністерді t-SNE немесе PCA қолданып 2D немесе 3D кеңістікке шығарады. Модельдің түрлі нарық режимдерін, актив кластарын, немесе тұрақсыздық күйлерін ішкі көріністерінде ажырата үйренгенін визуализациялаңыз.

HParams — эксперименттер бойынша гиперпараметр іздеулерін салыстырады. Түрлі оқу жылдамдықтарымен, архитектуралармен, және dropout мәнімен сол моделді жүргізіңіз, содан кейін қайсы комбинация ең жақсы валидация метрикаларын беретінін анықтаңыз. Бұл жүйелі салыстыру ad hoc тәжірибелеуді дәлел-негізделген модель таңдауымен алмастырады.

TensorBoard torch.utils.tensorboard.SummaryWriter класы арқылы PyTorch-пен де жұмыс істейді — визуализация құралдары фреймворкқа тәуелсіз, бұл TensorBoard-тың ML экожүйесі бойынша іс жүзіндегі стандартқа айналуының бір себебі.

TensorBoard панельдері (концептуалды) Скалярлар оқу vs валидация шығыны Гистограммалар салмақтар / активациялар HParams жүргізулерді салыстыру Артық оқыту P&L бэктестінде көрінбес бұрын алшақ қисықтарда көрінеді.
Скалярлар сай келу сапасын ұстайды; гистограммалар бұзылған деңгейлерді ұстайды; HParams эксперименттерді салыстырады.

Өнім үшін tf.data құбырлары және TensorFlow Serving

Деректер жиынтығыңыз жадқа сыймайтындай үлкен болғанда — GaiaEx сияқты биржалардан тик-деңгейлі деректермен жұмыс істегенде көп кездесетін жағдай — tf.data GPU-ды бәрін бірден жүктемей қоректендіретін тиімді, параллельделген деректер құбырын ұсынады.

dataset = tf.data.Dataset.from_tensor_slices((features, labels))
dataset = (dataset
    .window(60, shift=1, drop_remainder=True)
    .flat_map(lambda w: w.batch(60))
    .batch(64)
    .prefetch(tf.data.AUTOTUNE)
)

prefetch(AUTOTUNE) шақыруы шешуші — ол деректер жүктеу мен модель есептеуінің қатпарлануына мүмкіндік береді, сондықтан GPU келесі топтаманы күтіп бос отырмайды. Күрделі белгі инженериясы бар қаржы деректер жиынтықтары үшін, сіз параллельды жүретін .map() трансформацияларын қатарластыра аласыз, индикаторлар мен нормализацияны алдын есептеп сақтаудың орнына, жедел есептеу.

TensorFlow Serving — модельдерді жоғары өнімді gRPC немесе REST API артында орналастыратын өнімдік деңгейдегі жүйе. Ол модель версиялауды (ескісін запасной ретінде ұстап, жаңасын қызмет көрсете отырып), сұрау топтастыруды (GPU тиімділігі үшін бірнеше болжам сұрауын біріктіру), және аппараттық үделдетуді басқарады — бұлардың бәрі кідіріс те, тұрақтылық та маңызды сауда жүйелері үшін критикалық.

# SavedModel экспорттау
model.save("models/price_predictor/1")

# Docker-мен қызмет көрсету
# docker run -p 8501:8501 \
#   --mount type=bind,source=$(pwd)/models,target=/models \
#   -e MODEL_NAME=price_predictor \
#   tensorflow/serving

Типтік өнімдік архитектура: сіздің сауда ботыңыз GaiaEx-тің WebSocket фидіне қосылады, нақты уақытта белгілерді есептейді, болжам сұрауларын TF Serving-ке жібереді, және бір таңбалы миллисекундтарда болжамдар алады. Жаңа деректерге қайта оқығанда, жаңаланған моделді 2-нұсқасы ретінде орналастырыңыз — TF Serving оны үзіліс уақытысыз алмастырады.

TensorFlow Lite, шет орналастыру, және TF vs PyTorch

TensorFlow Lite модельдерді мобильді құрылғыларда, кірікітірілген жүйелерде, және шет аппаратында орналастыру үшін сығады. Квантталу (32-биттік қалқыма нүктелі салмақтарды 8-биттік бүтіндерге айналдыру), кесу (пруинг, нольге жақын салмақтарды алып тастау), және архитектура оптимизациясы сияқты әдістер арқылы, TF Lite модельді тактығының көпшілігін сақтап отырса, 4x немесе одан да көп кішірейте алады. Бұл шектеулі есептеу қуаты бар құрылғыларда тікелей болжам жүргізуге мүмкіндік береді — бұлттық инфраструктурадан тәуелсіз жұмыс істеуі керек шет сауда түйіндері немесе бақылау тақтайшалары үшін пайдалы.

# Keras моделін TF Lite-ке айналдыру
converter = tf.lite.TFLiteConverter.from_saved_model("models/v1")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

with open("model.tflite", "wb") as f:
    f.write(tflite_model)

TensorFlow мен PyTorch — қаржы қолданбалары үшін қайсысын таңдаған жөн?

  • Зерттеу және прототиптеу үшін: PyTorch. Оның динамикалық графтары, Python-тық API-і, және академиялық зерттеудегі басым позициясы көбірек мақалада PyTorch код болатынын, көбірек оқу құралында PyTorch қолданылатынын, және дебагтеудің интуитивтірек болатынын білдіреді.
  • Масштабта өнімдік орналастыру үшін: TensorFlow әлі де артықшылықтарды ұстанады. TF Serving, TF Lite, және TensorFlow.js PyTorch-тың TorchServe және ONNX Runtime жетіліп жатқан жолдардан жақсы сыналған орналастыру жолдарын ұсынады.
  • Қаржы ML-і үшін нақты: Модель дамыту және тәжірибелеу үшін PyTorch-пен бастаңыз. Егер өнімдік талаптарыңыз TF Serving-тің жетілгендігін немесе TF Lite-тің шеттік орналастыруын талап етсе, ең жақсы модельдеріңізді конвертациялаңыз. Көпшілік команда зерттеу үшін PyTorch, орналастыру үшін TensorFlow қолданады, оларды ONNX (Open Neural Network Exchange) форматы арқылы байланыстырады.

Шыншыл шындық: екі фреймворк те жақындасып жатыр. TensorFlow eager орындалуын қабылдады; PyTorch граф-деңгейіндегі оптимизация үшін torch.compile қосты. Keras-тың өзі қазір PyTorch, JAX, және TensorFlow-ды backend ретінде қолдайды. Ең жақсы фреймворк — сіздің командаңыз жақсы білетін және өнімдік код жеткізе алатын фреймворк. Біреуін таңдаңыз, оны меңгеріңіз, және нақты мәселені — нарықтарды болжауды — құралдарды талқылаудың орнына шешіңіз.