Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 199новых вакансий за сутки·93 838вакансий открыто сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 273
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 409 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 222
  • Облачные технологии14 153
  • QA вакансии3 463
  • Backend вакансии2 114
  • Инженер данных1 798
  • Продакт-менеджер1 248

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии997
  • AI вакансии955
  • Frontend вакансии755
  • Mobile вакансии44

По стеку

  • Go8 725
  • Java6 580
  • Node.js2 032
  • .NET1 731
  • Kotlin1 619
  • Rust1 471
  • C#717
  • PHP689
  • C++580

DevOps и инфраструктура

  • Kubernetes7 778
  • DevOps вакансии6 080
  • Linux-инфраструктура5 500
  • Terraform / IaC4 278
  • CI/CD3 272
  • Мониторинг и Observability1 790
  • SRE567
  • Кибербезопасность454

Аналитика и данные

  • Data Scientist1 138
  • Бизнес-аналитик921
  • Аналитик данных857
  • Системный аналитик154

Другие направления

  • Проджект-менеджер623
  • UI/UX дизайн148
  • Ручное тестирование14

По регионам

  • Вакансии в США44 166
  • Вакансии в Европе24 014
  • Вакансии в Канаде4 535
  • Работа в России3 868

По формату

  • Удалённые вакансии75 003
  • Релокация в США44 160
  • Гибридная работа12 465
  • Офисная работа7 099

По уровню

  • Senior вакансии42 643
  • Middle вакансии20 963
  • Junior вакансии6 714

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме PyTorchВсе вопросы
PyTorchMiddleТеория

В чём разница между динамическим графом вычислений PyTorch и статическим графом TensorFlow?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

PyTorch строит граф вычислений динамически на каждом forward pass (define-by-run), что упрощает отладку и поддержку динамических структур; TensorFlow 1.x компилировал статический граф заранее (define-and-run), давая лучшую оптимизацию но усложняя отладку. TF 2.x и torch.compile сближают подходы.

Как работает autograd в PyTorch

При каждом вычислении с тензорами, у которых requires_grad=True, PyTorch записывает операцию в DAG (directed acyclic graph) через объект grad_fn. После вызова loss.backward() движок обходит граф в обратном порядке и накапливает градиенты.

import torch

# Динамический граф: условие меняет топологию на каждом шаге
def dynamic_forward(x: torch.Tensor, use_skip: bool) -> torch.Tensor:
    h = torch.relu(x @ torch.randn(x.shape[-1], 64, requires_grad=True))
    if use_skip:          # топология зависит от runtime-условия
        h = h + x[:, :64]
    return h.sum()

x = torch.randn(4, 64)
loss = dynamic_forward(x, use_skip=True)
loss.backward()           # работает без предварительной компиляции
print(loss.item())

Два подхода к построению графа

Статический граф (define-and-run) — граф описывается декларативно до запуска, компилируется один раз и затем выполняется многократно. TensorFlow 1.x, Theano, MXNet использовали этот подход. Компилятор знает граф целиком и может применять глобальные оптимизации: fusion операций, constant folding, параллелизм.

Динамический граф (define-by-run) — граф строится прямо во время выполнения Python-кода forward pass. PyTorch использует этот подход с самого начала. Каждый вызов forward() создаёт новый граф; Python-отладчик видит всё как обычный код.

Сравнение по ключевым осям

  • Отладка: PyTorch — обычный pdb/debugpy, видны значения тензоров; TF 1.x — нужен tf.Session, значения доступны только через sess.run().
  • Динамические структуры: переменная длина последовательностей, рекурсивные сети, tree-RNN — тривиальны в PyTorch, требуют TF Dynamic RNN или padding в TF 1.x.
  • Производительность: статический граф позволяет компилятору делать kernel fusion и убирать мёртвый код. TF XLA и torch.compile (TorchDynamo) дают похожие оптимизации в современных версиях.
  • Деплой: статический граф сериализуется как протобаф и запускается без Python. PyTorch закрывает этот gap через TorchScript и ONNX.

TF 2.x и torch.compile сближают подходы

import torch
import torch.nn as nn

class Encoder(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(128, 64)

    def forward(self, x):
        return torch.relu(self.fc(x))

model = Encoder()
# torch.compile — JIT-компиляция динамического графа в оптимизированный код
compiled = torch.compile(model)   # требует PyTorch >= 2.0
out = compiled(torch.randn(16, 128))
print(out.shape)   # torch.Size([16, 64])

TensorFlow 2.x по умолчанию работает в eager mode (аналог динамического графа), а @tf.function трассирует функцию в статический граф при первом вызове.

Когда что выбирать

  • PyTorch: исследования, NLP с переменной длиной, RL, прототипирование — динамический граф упрощает эксперименты.
  • TF/JAX: production-сервинг на TPU, мобильные устройства (TFLite), экосистема TFX — статический граф даёт лучший деплой-путь.
  • В 2024–2025 граница размылась: torch.compile, ONNX Runtime, TensorRT принимают оба формата.

Подводные камни

  • Забыть освободить граф после backward: без loss.backward() с retain_graph=False (по умолчанию) граф удаляется; повторный вызов backward упадёт с ошибкой.
  • Накопление градиентов между шагами: не вызвать optimizer.zero_grad() перед backward — градиенты суммируются.
  • Python-условия внутри @torch.compile / TorchScript могут потребовать torch.jit.is_scripting() guard для корректной трассировки.
  • Перепутать TF eager mode и graph mode: некоторые операции ведут себя по-разному в @tf.function (Python side-effects выполняются один раз при трассировке).
  • torch.compile не поддерживает все Python-конструкции — некоторые графы падают обратно в eager (graph breaks), что снижает производительность.
  • Отсутствие детерминизма: динамический граф и CuDNN могут давать разные результаты при разных размерах батча, если не зафиксировать torch.backends.cudnn.deterministic = True.
  • Сериализация TorchScript требует аннотаций типов — динамический Python-код с *args/**kwargs не трассируется автоматически.
  • XLA на TPU требует статических форм — динамические размеры батча приводят к перекомпиляции на каждом шаге.

Типичные ошибки

  • Объяснять dynamic vs static graph только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

Что проверяет интервьюер

  • Может ли связать dynamic vs static graph с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Как вы знаете этот вопрос?

Проверить себя по теме PyTorch →

Источники

  • https://docs.pytorch.org/docs/stable/index.html
←Предыдущий вопросКак работает dropout в PyTorch и как его поведение различается во время обучения и инференса?Следующий вопрос→Как реализовать early stopping в цикле обучения PyTorch?

Связанные темы

PyTorchdata-aievaluationmodel-training

Вакансии с этим навыком

  • Principal Product Manager, Model Customization & Open-Weight Models
  • Senior Machine Learning Engineer (Growth)
  • Senior Staff Machine Learning Engineer, Perception, Simulation Realism
  • Engineering Manager, Machine Learning, Ranking
  • AI Forward Deployed Engineer - France

Частые вопросы на собеседовании

  • Как сохранять и загружать веса модели в PyTorch (state_dict vs полная модель)?
  • Объясните разницу между режимами model.train() и model.eval().
  • Зачем нужен optimizer.zero_grad() и почему его необходимо вызывать перед каждым обратным проходом?
  • В каких data/AI-задачах PyTorch даёт реальный выигрыш, а где лучше выбрать другой инструмент или более простой pipeline?