Forwarded from Renat
Reproducing_OpenAI's_o1_A_Reinforcement_Learning_Roadmap.wav
56.7 MB
подкаст по статье, кому лень читать как и мне)
Forwarded from Data Secrets
Известный мировой тех.подкаст про AI Latent.Space в честь Нового Года выложили 2025 AI Engineering Reading List
Это огромный список актуальных мастридов для ML/AI инженеров. В нем нет базовой базы, а только те статьи, которые непосредственно относятся к современным развивающимся методам и технологиям.
Охвачены 10 самых важных на сегодняшний день областей: файнтюнинг, агенты, диффузия, голос, вижн модели, генерация кода, RAG, цепочки рассуждений, бенчмарки и эвал, и frontier LLMs.
Список получился у ребят действительно очень крутой и насущный, так что обязательно забирайте себе в бэклог или в ридинг-клабы.
Это огромный список актуальных мастридов для ML/AI инженеров. В нем нет базовой базы, а только те статьи, которые непосредственно относятся к современным развивающимся методам и технологиям.
Охвачены 10 самых важных на сегодняшний день областей: файнтюнинг, агенты, диффузия, голос, вижн модели, генерация кода, RAG, цепочки рассуждений, бенчмарки и эвал, и frontier LLMs.
Список получился у ребят действительно очень крутой и насущный, так что обязательно забирайте себе в бэклог или в ридинг-клабы.
Forwarded from ML physicist (Алексей Маметьев)
После появления LLM ок текстовые энкодеры стали часто использовать для задач RAG.
Они позволяют превратить текст в осмысленный вектор, эмбединг, по которому можно искать релевантные куски в условной базе знаний нужную информацию, и подсовывать в контекст ллмки.
Однако следует понимать что тут есть одна идейная проблема - мы хотим что бы "вектора смысла" у
> Помогите не могу зайти в электронную почту, пишет учетка заблокирована за большое число неверных попыток, что делать?
> В случае ввода пароля более 10 раз неверно, аккаунт блокируется. Для разблокировки необходимо создать заявку в хелпдеск
смысл этих предложений немного разный, блин, одно из них вообще вопрос, а второе - утвердительное предложение. Из за чего механизм с векторным поиском может давать много сбоев.
Чуть чуть помогает исправить ситуацию - reranker-ы. Они работают чуть по другому, принимая на вход 2 куска текста - вопрос и элемент базы знаний - анализируют их вместе и возвращают число - релевантность чанка по отношению к вопросу. Можно представить что это 2 LLM -ки, с перемешанными последними слоями и Value Head-ом на конце.
Такой подход позволяет более глубоко анализировать семантику языка, но и дороже в компьюте (для проверки N чанков потребуется O(N^2) вызовов модели, когда как с векторынми механизмами O(N)), так что его имеет смысл ставить на втором этапе работы вашего RAG-а для переранжирования уже более менее релевантных кусков найденых векторным поиском
Для обучения таких штук обычно берут претреинед модельки, после чего поверх учат метриклернингом
Ну и в подарок небольшой гайд как выбрать reranker под вашу задачу, в коментариях в полном качестве
Они позволяют превратить текст в осмысленный вектор, эмбединг, по которому можно искать релевантные куски в условной базе знаний нужную информацию, и подсовывать в контекст ллмки.
Однако следует понимать что тут есть одна идейная проблема - мы хотим что бы "вектора смысла" у
> Помогите не могу зайти в электронную почту, пишет учетка заблокирована за большое число неверных попыток, что делать?
> В случае ввода пароля более 10 раз неверно, аккаунт блокируется. Для разблокировки необходимо создать заявку в хелпдеск
смысл этих предложений немного разный, блин, одно из них вообще вопрос, а второе - утвердительное предложение. Из за чего механизм с векторным поиском может давать много сбоев.
Чуть чуть помогает исправить ситуацию - reranker-ы. Они работают чуть по другому, принимая на вход 2 куска текста - вопрос и элемент базы знаний - анализируют их вместе и возвращают число - релевантность чанка по отношению к вопросу. Можно представить что это 2 LLM -ки, с перемешанными последними слоями и Value Head-ом на конце.
Такой подход позволяет более глубоко анализировать семантику языка, но и дороже в компьюте (для проверки N чанков потребуется O(N^2) вызовов модели, когда как с векторынми механизмами O(N)), так что его имеет смысл ставить на втором этапе работы вашего RAG-а для переранжирования уже более менее релевантных кусков найденых векторным поиском
Для обучения таких штук обычно берут претреинед модельки, после чего поверх учат метриклернингом
Ну и в подарок небольшой гайд как выбрать reranker под вашу задачу, в коментариях в полном качестве
Forwarded from Старший Авгур
На HF довольно давно появился пост, который я как-то пропустил, но который хорошо и кратко описывает основные оптимизации при обучении языковых моделей. Пост: ссылка
Есть ещё старый пост на ту же тему от Eleuther: ссылка
А пост ниже — это короткая выжимка от меня, именно по экономии памяти на одной карточке.
🔹Числа с плавающей точкой (IEEE 754) — основной тип для вычислений в языковых моделях, у них есть знак, экспонента и мантисса. Экспонента контролирует диапазон значений, мантисса — точность в рамках этого диапазона. Также напомню, что есть приколы с представлением чисел около нуля (aka денормализованные числа). Есть куча реализаций разной битности:
— float: 32 бита, E8M23
— tf32: 19 бит, E8M10 (специфичный для Nvidia формат, отсюда все странности)
— fp16: 16 бит, E5M10
— bf16: 16 бит, E8M7 (экспонента и диапазон как у float)
— fp8: 8 бит, E4M3 или E5M2
🔹На что тратится память:
W: Сами веса модели
A: Активации (промежуточные состояния, результат вычисления функции от входа и весов)
G: Градиенты (обновления весов модели при обучении)
O: Состояние оптимизатора (моменты и дисперсия)
При инференсе есть только W и часть A, при обучении есть все 4 категории. Далее у каждого метода стоят буквы, которые обозначают, что именно экономится.
🔹Методы экономии памяти при инференсе:
— Квантование модели (WA): ужимаем тип данных для весов и активаций. В большинстве статьей так и написано: W4A16, что означает, что веса в 4 битах, активации в 16 битах.
— Flash Attention (A): оптимизируем вычисление внимания поблочными вычислениями в кэше GPU, попутно уменьшая сложность по памяти с квадратичной по длине последовательности до линейной.
🔹Дополнительные методы экономии памяти при обучении на одной карточке:
— Смешанная точность (A): имеем рабочую копию в 16 битах (bf16 или fp16), а также мастер-копию в 32 битах. Все операции делаем с рабочей копией и потом обновления весов вливаем в мастер-копию. Вы спросите: а где профит? А профит в том, что активации в 16 битах, а активации — это дофига памяти.
— Квантование оптимизатора (O): ужимаем тип данных для состояний оптимизатора. Чаще всего в 8 бит, перед собственно применением градиентов расквантовываем.
— Аккумуляция градиентов (AG): если мы хотим батч из больше чем одного примера, то A и G тоже раздуются. Но нам совсем не обязательно считать градиенты параллельно, поэтому мы можем считать их последовательно, суммировать, и только потом применять. Если это правильно😁 отмасштабировать, то это теоретически эквивалентно обучению на всём батче.
— Чекпоинты активаций (A): при обучении нам по-хорошему нужны активации на всех слоях, чтобы потом считать по ним градиенты. Но нам сначала нужно дойти до лосса, поэтому мы выкидываем часть промежуточных активаций и пересчитываем их заново на основе оставшихся чекпоинтов тогда, когда они нам реально понадобятся для подсчёта градиентов.
— Адаптеры (GO): основную модель вообще не трогаем, учим только новый маленький набор весов. Градиенты считаем только по нему, и на этом сильно экономим.
На практике используется буквально всё, везде и сразу🤯
Типичный конфиг:
Есть ещё старый пост на ту же тему от Eleuther: ссылка
А пост ниже — это короткая выжимка от меня, именно по экономии памяти на одной карточке.
🔹Числа с плавающей точкой (IEEE 754) — основной тип для вычислений в языковых моделях, у них есть знак, экспонента и мантисса. Экспонента контролирует диапазон значений, мантисса — точность в рамках этого диапазона. Также напомню, что есть приколы с представлением чисел около нуля (aka денормализованные числа). Есть куча реализаций разной битности:
— float: 32 бита, E8M23
— tf32: 19 бит, E8M10 (специфичный для Nvidia формат, отсюда все странности)
— fp16: 16 бит, E5M10
— bf16: 16 бит, E8M7 (экспонента и диапазон как у float)
— fp8: 8 бит, E4M3 или E5M2
🔹На что тратится память:
W: Сами веса модели
A: Активации (промежуточные состояния, результат вычисления функции от входа и весов)
G: Градиенты (обновления весов модели при обучении)
O: Состояние оптимизатора (моменты и дисперсия)
При инференсе есть только W и часть A, при обучении есть все 4 категории. Далее у каждого метода стоят буквы, которые обозначают, что именно экономится.
🔹Методы экономии памяти при инференсе:
— Квантование модели (WA): ужимаем тип данных для весов и активаций. В большинстве статьей так и написано: W4A16, что означает, что веса в 4 битах, активации в 16 битах.
— Flash Attention (A): оптимизируем вычисление внимания поблочными вычислениями в кэше GPU, попутно уменьшая сложность по памяти с квадратичной по длине последовательности до линейной.
🔹Дополнительные методы экономии памяти при обучении на одной карточке:
— Смешанная точность (A): имеем рабочую копию в 16 битах (bf16 или fp16), а также мастер-копию в 32 битах. Все операции делаем с рабочей копией и потом обновления весов вливаем в мастер-копию. Вы спросите: а где профит? А профит в том, что активации в 16 битах, а активации — это дофига памяти.
— Квантование оптимизатора (O): ужимаем тип данных для состояний оптимизатора. Чаще всего в 8 бит, перед собственно применением градиентов расквантовываем.
— Аккумуляция градиентов (AG): если мы хотим батч из больше чем одного примера, то A и G тоже раздуются. Но нам совсем не обязательно считать градиенты параллельно, поэтому мы можем считать их последовательно, суммировать, и только потом применять. Если это правильно
— Чекпоинты активаций (A): при обучении нам по-хорошему нужны активации на всех слоях, чтобы потом считать по ним градиенты. Но нам сначала нужно дойти до лосса, поэтому мы выкидываем часть промежуточных активаций и пересчитываем их заново на основе оставшихся чекпоинтов тогда, когда они нам реально понадобятся для подсчёта градиентов.
— Адаптеры (GO): основную модель вообще не трогаем, учим только новый маленький набор весов. Градиенты считаем только по нему, и на этом сильно экономим.
На практике используется буквально всё, везде и сразу
Типичный конфиг:
"model": {
"attn_implementation": "flash_attention_2", // вы поняли
"load_in_4bit": true, // квантование модели
...
},
"trainer": {
"gradient_accumulation_steps": 32, // аккумуляция градиентов
"bf16": true, // смешанная точность
"optim": "adamw_8bit", // квантование оптимизатора
"gradient_checkpointing": true, // чекпоинты активаций
...
},
"lora": {...} // адаптерыPlease open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Katser
Я уже писал про библиотеку TSAD (Time Series Analysis for Simulation of Technological Processes) в канале, но отстраненно, как автор канала. Дам пару комментариев как соавтор и один из контрибьюторов проекта.
· Проект начинался как time series anomaly detection (поэтому TSAD), но потом разросся до time series analysis for diagnostics, и, наконец, решили не ограничиваться диагностикой, а пойти во все задачи промышленности (прогнозирование, оптимизация)
· Идея появилась, потому что просто не было open-source промышленных библиотек, а проблемы с предварительной обработкой данных, EDA, оценкой алгоритмов были
· Текущая цель библиотеки — сделать набор пайплайнов для AutoML в промышленности
· Функционала не достает, но есть несколько супер полезных функций/модулей, уже хорошо проработанных и реализованных:
1️⃣ наборы данных для разных задач промышленности (RUL, CPD, outlier detection и др.)
2️⃣ проработанная архитектура пайплайнов (самих пайплайнов бы побольше), что позволяет контрибьютить и разрабатывать сами пайплайны решения задач
3️⃣ реализованные сложные метрики оценки типа NAB scoring algorithm, вот описание в документации. Их уже несколько лет активно используем в своих реальных проектах
Можно выдергивать и пользоваться этим функционалом в своих проектах.
· Проект начинался как time series anomaly detection (поэтому TSAD), но потом разросся до time series analysis for diagnostics, и, наконец, решили не ограничиваться диагностикой, а пойти во все задачи промышленности (прогнозирование, оптимизация)
· Идея появилась, потому что просто не было open-source промышленных библиотек, а проблемы с предварительной обработкой данных, EDA, оценкой алгоритмов были
· Текущая цель библиотеки — сделать набор пайплайнов для AutoML в промышленности
· Функционала не достает, но есть несколько супер полезных функций/модулей, уже хорошо проработанных и реализованных:
Можно выдергивать и пользоваться этим функционалом в своих проектах.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Kali Novskaya
🌸Подборка NeurIPS: LLM-статьи 🌸
#nlp #про_nlp #nlp_papers
Вот и прошёл NeurIPS 2024, самая большая конференция по машинному обучению. Ниже — небольшая подборка статей, которые мне показались наиболее интересными. Про некоторые точно стоит сделать отдельный обзор.
Агенты
🟣 StreamBench: Towards Benchmarking Continuous Improvement of Language Agents arxiv
🟣 SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering arxiv
🟣 AgentBoard: An Analytical Evaluation Board of Multi-turn LLM Agents arxiv
🟣 DiscoveryWorld: A Virtual Environment for Developing and Evaluating Automated Scientific Discovery Agents arxiv
Бенчмарки
🟣 DevBench: A multimodal developmental benchmark for language learning arxiv
🟣 CVQA: Culturally-diverse Multilingual Visual Question Answering Benchmark arxiv
🟣 LINGOLY: A Benchmark of Olympiad-Level Linguistic Reasoning Puzzles in Low-Resource and Extinct Languages arxiv
🟣 CLUE - Cross-Linked Unified Embedding for cross-modality representation learning arxiv
🟣 EmoBench: Evaluating the Emotional Intelligence of Large Language Models arxiv
LLM
🟣 The PRISM Alignment dataset: What Participatory, Representative and Individualised Human Feedback Reveals About the Subjective and Multicultural Alignment of Large Language Models arxiv
🟣 UniGen: A Unified Framework for Textual Dataset Generation via Large Language Models arxiv
🟣 A Watermark for Black-Box Language Models arxiv
#nlp #про_nlp #nlp_papers
Вот и прошёл NeurIPS 2024, самая большая конференция по машинному обучению. Ниже — небольшая подборка статей, которые мне показались наиболее интересными. Про некоторые точно стоит сделать отдельный обзор.
Агенты
Бенчмарки
LLM
Please open Telegram to view this post
VIEW IN TELEGRAM
arXiv.org
StreamBench: Towards Benchmarking Continuous Improvement of Language Agents
Recent works have shown that large language model (LLM) agents are able to improve themselves from experience, which is an important ability for continuous enhancement post-deployment. However,...
Forwarded from Hacker News
Show HN: Anki AI Utils (Score: 150+ in 16 hours)
Link: https://readhacker.news/s/6kdsm
Comments: https://readhacker.news/c/6kdsm
Hi hn, I am nearly at the end of medical school so it is time I publish and "advertise" my open source scripts/apps for anki! Here's the pitch:
Anki AI Utils is a suite of AI-powered tools designed to automatically improve cards you find challenging. Whether you're studying medicine, languages, or any complex subject, these tools can:
- Explain difficult concepts with clear, ChatGPT-generated explanations.
- Illustrate key ideas using Dall-E or Stable Diffusion-generated images.
- Create mnemonics tailored to your memory style, including support for the Major System.
- Reformulate poorly worded cards for clarity and better retention.
Key Features:
- Adaptive Learning: Uses semantic similarity to match cards with relevant examples.
- Personalized Memory Hooks: Builds on your existing mnemonics for stronger recall.
- Automation Ready: Run scripts daily to enhance cards you struggled with.
- Universal Compatibility: Works across all Anki clients (Windows, Mac, Linux, Android, iOS).
Example:
For a flashcard about febrile seizures, Anki AI Utils can:
- Generate a Dall-E illustration of a toddler holding a teacup next to a fireplace.
- Create mnemonics like "A child stumbles near the fire, dances symmetrically, has one strike, and fewer than three fires."
- Provide an explanation of why febrile seizures occur and their diagnostic criteria.
Call for Contributors:
This project is battle-tested but needs help to become a polished Anki addon. If you’re a developer or enthusiast, join us to make these tools more accessible!
Check out my other projects on GitHub: [Anki AI Utils](https://github.com/thiswillbeyourgithub)
Transform your Anki experience with AI—because learning should be smarter, not harder.
Link: https://readhacker.news/s/6kdsm
Comments: https://readhacker.news/c/6kdsm
Hi hn, I am nearly at the end of medical school so it is time I publish and "advertise" my open source scripts/apps for anki! Here's the pitch:
Anki AI Utils is a suite of AI-powered tools designed to automatically improve cards you find challenging. Whether you're studying medicine, languages, or any complex subject, these tools can:
- Explain difficult concepts with clear, ChatGPT-generated explanations.
- Illustrate key ideas using Dall-E or Stable Diffusion-generated images.
- Create mnemonics tailored to your memory style, including support for the Major System.
- Reformulate poorly worded cards for clarity and better retention.
Key Features:
- Adaptive Learning: Uses semantic similarity to match cards with relevant examples.
- Personalized Memory Hooks: Builds on your existing mnemonics for stronger recall.
- Automation Ready: Run scripts daily to enhance cards you struggled with.
- Universal Compatibility: Works across all Anki clients (Windows, Mac, Linux, Android, iOS).
Example:
For a flashcard about febrile seizures, Anki AI Utils can:
- Generate a Dall-E illustration of a toddler holding a teacup next to a fireplace.
- Create mnemonics like "A child stumbles near the fire, dances symmetrically, has one strike, and fewer than three fires."
- Provide an explanation of why febrile seizures occur and their diagnostic criteria.
Call for Contributors:
This project is battle-tested but needs help to become a polished Anki addon. If you’re a developer or enthusiast, join us to make these tools more accessible!
Check out my other projects on GitHub: [Anki AI Utils](https://github.com/thiswillbeyourgithub)
Transform your Anki experience with AI—because learning should be smarter, not harder.
GitHub
GitHub - thiswillbeyourgithub/AnkiAIUtils: AI-powered tools to enhance Anki flashcards with explanations, mnemonics, illustrations…
AI-powered tools to enhance Anki flashcards with explanations, mnemonics, illustrations, and adaptive learning for medical school and beyond - thiswillbeyourgithub/AnkiAIUtils
Forwarded from NLP Wanderer
42-ух минутный доклад с NeurIPS 2024 об основных конкурентах архитектуры трансформера
Вам в очень энергичной манере поведают:
- В чем логика заменять трансформер
- Общий таймлайн развития альтернативных архитектур с 2020 года и причем тут LSTM
- Что же там в итоге с линейным атеншеном в 2024том
- Кто же этот такой ваш RWKV, кто за ним стоит и почему он не хочет умирать в 2025том
- Как быть отчаяным ресерчером и в одиночку успешно линеаризовывать opensource LLM без собственного претрейна
- Что еще случилось за год (Jamba, Sana, DNA Models и что еще нас ждет
Смотреть на Ютубе
Вам в очень энергичной манере поведают:
- В чем логика заменять трансформер
- Общий таймлайн развития альтернативных архитектур с 2020 года и причем тут LSTM
- Что же там в итоге с линейным атеншеном в 2024том
- Кто же этот такой ваш RWKV, кто за ним стоит и почему он не хочет умирать в 2025том
- Как быть отчаяным ресерчером и в одиночку успешно линеаризовывать opensource LLM без собственного претрейна
- Что еще случилось за год (Jamba, Sana, DNA Models и что еще нас ждет
Смотреть на Ютубе
Forwarded from ИИгорь R&D
#учимпитон
Еще немного полезных хаков. Хочется уметь по конфигу легко и красиво получать объект класса. Но в конфиге только строки (не надо unsafe YAML, это бездна), а чтобы получить объект надо строку с названием типа как-то преобразовать в сам тип. Можно это сделать кучей if-ов или, начиная с питона 3.10, match+case, и там вручную все проверять и создавать объекты. Но это все костыльно и некрасиво. А вот как красиво:
Как это работает. Функция
Основное преимущество — ничего не надо менять нигде в коде при добавлении нового класса-наследника. То есть даже если это библиотечный код, а новый наследник создается в пользовательском коде, то этот наследник зарегистрируется и будет доступен по имени вместе с остальными дочерними классами.
Еще немного полезных хаков. Хочется уметь по конфигу легко и красиво получать объект класса. Но в конфиге только строки (не надо unsafe YAML, это бездна), а чтобы получить объект надо строку с названием типа как-то преобразовать в сам тип. Можно это сделать кучей if-ов или, начиная с питона 3.10, match+case, и там вручную все проверять и создавать объекты. Но это все костыльно и некрасиво. А вот как красиво:
import abc
class Base(abc.ABC):
_registry = {}
def __init_subclass__(cls, /, name: str | None = None, **kwargs):
super().__init_subclass__(**kwargs)
name = name or cls.__name__
if name in Base._registry:
raise ValueError(f"{name} is already registered")
Base._registry[name] = cls
@staticmethod
def get_instance(name: str, *args, **kwargs) -> Base:
return Base._registry[name](*args, **kwargs)
Как это работает. Функция
__init_subclass__ вызывается каждый раз, когда в питоне создается класс-наследник (сам класс, не объект!). Тогда в registry по ключу name (по умолчанию тупо имя субкласса) записывается сам класс. Можно зарегистрировать с иным именем. Пользоваться этим так:class Sub(Base):
def __init__(self, a, b):
pass
class OtherSub(Base, name="Sub2"):
pass
sub = Base.get_instance("Sub", 42, b=2) # create instance of Sub
# create instance of OtherSub by the explicitly specified name
other_sub = Base.get_instance("Sub2")
Основное преимущество — ничего не надо менять нигде в коде при добавлении нового класса-наследника. То есть даже если это библиотечный код, а новый наследник создается в пользовательском коде, то этот наследник зарегистрируется и будет доступен по имени вместе с остальными дочерними классами.
#causal
Интересные статьи по causal inference на Хабре
https://habr.com/ru/companies/sberbank/articles/847382/
https://habr.com/ru/companies/sberbank/articles/847406/
Интересные статьи по causal inference на Хабре
https://habr.com/ru/companies/sberbank/articles/847382/
https://habr.com/ru/companies/sberbank/articles/847406/
Хабр
Causal Inference: прозрение и практика. Лекция 1. Основные понятия Causal Inference
В нашем веке центральное место в анализе и использовании данных занимает Data Science. Однако часто данное понятие сводят к одним лишь алгоритмам машинного обучения или даже...
Forwarded from DevFM
Docker в каждый дом
Стрим FastAPI+Docker породил бурное обсуждение, а нужен ли докер в таком небольшом проекте. Наш ответ — обязательно! В современном мире разработки docker является такой же неотъемлемой частью разработки, как и git. Есть некоторые области без докера, например, разработка GUI, операционных систем или микроконтроллеров. Но весь backend, frontend и data science без докера вообще не живут. Давайте посмотрим, какие прямые выгоды даёт докер:
1. Всегда понятно, как запустить код. Dockerfile является однозначной инструкцией по сборке проекта. Bus-factor не мешает жить.
2. Легко включать новых людей в разработку. Инструкция в ридми сводится к docker build & docker run, что понятно даже junior-разработчикам.
3. Деплой можно производить где угодно. В пару команд можно запуститься на компе разработчика, на test или prod сервере, у заказчика на ноутбуке – и везде всё будет одинаково, нужен только сам Docker.
4. Проект одинаково себя ведёт везде. Это упрощает воспроизведение проблемы и сокращает время на багфикс.
5. Нет проблем с конфликтом зависимостей-библиотек. Вы можете на одной машине запустить проекты с условным django 3 и django 4, они никак друг другу не помешают.
6. Легко поднимать зависимости-компоненты. Для любой базы данных берётся готовый докер-образ, меняется конфиг и в одну команду запускается. С выходом на docker compose можно одной командой поднимать сборную солянку из backend, frontend, базы данных, nginx и Let's Encrypt.
7. Просто откатываться к старой версии. Версионирование докер-образов позволяет запустить новую версию, и, если что-то пошло не так, откатиться назад за десятки секунд.
8. Понятные внешние эффекты проекта. В команде docker run указаны проброшенные в контейнер каталоги и порты. Всё остальное изолированно.
В общем, со всех сторон одна польза. Минусы? Требуется изучить новый инструмент и best practices. Кажется, на этом всё. Даже дополнительных накладных расходов на виртуализацию нет. И помните – если docker вам мешает, скорее всего, вы что-то делаете неправильно.
Для запуска нескольких связанных контейнеров пользуйтесь compose, гайд тут. Если ещё нужно управлять множеством серверов, то посмотрите на kubernetes.
#skills #sudo #devfm
Стрим FastAPI+Docker породил бурное обсуждение, а нужен ли докер в таком небольшом проекте. Наш ответ — обязательно! В современном мире разработки docker является такой же неотъемлемой частью разработки, как и git. Есть некоторые области без докера, например, разработка GUI, операционных систем или микроконтроллеров. Но весь backend, frontend и data science без докера вообще не живут. Давайте посмотрим, какие прямые выгоды даёт докер:
1. Всегда понятно, как запустить код. Dockerfile является однозначной инструкцией по сборке проекта. Bus-factor не мешает жить.
2. Легко включать новых людей в разработку. Инструкция в ридми сводится к docker build & docker run, что понятно даже junior-разработчикам.
3. Деплой можно производить где угодно. В пару команд можно запуститься на компе разработчика, на test или prod сервере, у заказчика на ноутбуке – и везде всё будет одинаково, нужен только сам Docker.
4. Проект одинаково себя ведёт везде. Это упрощает воспроизведение проблемы и сокращает время на багфикс.
5. Нет проблем с конфликтом зависимостей-библиотек. Вы можете на одной машине запустить проекты с условным django 3 и django 4, они никак друг другу не помешают.
6. Легко поднимать зависимости-компоненты. Для любой базы данных берётся готовый докер-образ, меняется конфиг и в одну команду запускается. С выходом на docker compose можно одной командой поднимать сборную солянку из backend, frontend, базы данных, nginx и Let's Encrypt.
7. Просто откатываться к старой версии. Версионирование докер-образов позволяет запустить новую версию, и, если что-то пошло не так, откатиться назад за десятки секунд.
8. Понятные внешние эффекты проекта. В команде docker run указаны проброшенные в контейнер каталоги и порты. Всё остальное изолированно.
В общем, со всех сторон одна польза. Минусы? Требуется изучить новый инструмент и best practices. Кажется, на этом всё. Даже дополнительных накладных расходов на виртуализацию нет. И помните – если docker вам мешает, скорее всего, вы что-то делаете неправильно.
Для запуска нескольких связанных контейнеров пользуйтесь compose, гайд тут. Если ещё нужно управлять множеством серверов, то посмотрите на kubernetes.
#skills #sudo #devfm
Telegram
DevFM
Стрим: разбираем Fastapi + Docker
Сняли почти часовое видео для начинающих, смотрите где удобно youtube / rutube / dzen / VK.
В нём собираем приложение по доке FastAPI (кстати, документацию читать полезно, а их дока крутая). В видео фокусируемся на обвязке…
Сняли почти часовое видео для начинающих, смотрите где удобно youtube / rutube / dzen / VK.
В нём собираем приложение по доке FastAPI (кстати, документацию читать полезно, а их дока крутая). В видео фокусируемся на обвязке…