🤖 Как ограничения Python влияют на развитие ИИ
|
Благодаря своей простоте и наличию большого количества библиотек для машинного обучения и анализа данных, Python стал де-факто стандартом AI-индустрии . Однако с ростом количества пользователей ИИ-сервисов растут и опасения по поводу возможностей языка: высоконагруженным платформам явно не хватает производительности Python. Ограничения Питона негативно влияют на скорость работы ИИ-моделей, на эффективность обслуживания сопутствующих процессов, и связаны с: - интерпретируемой природой языка;
- однопоточностью;
- глобальным блокировщиком интерпретатора (GIL).
Автор видео рассматривает потенциальные решения этих проблем, включая использование альтернативных языков – от надежных ветеранов JavaScript и Java до суперскоростных новинок Go, Rust и Zig, однако приходит к выводу, что роль Python в ИИ в обозримом будущем не уменьшится – альтернативы огромной коллекции питоновских ИИ-библиотек и фреймворков пока нет. |
Бытует мнение, что профессионалы всегда и везде должны использовать ООП, независимо от сложности и назначения проекта, потому что классы – это круто, а функциональный подход – для дилетантов. В то же время некоторые опытные программисты считают, что использование классов нередко вредит простым проектам – делает код чрезмерно сложным для понимания и поддержки. Автор видео показывает, что во многих случаях классы вообще не нужны , потому что все то же самое проще сделать с помощью обычной функции и словаря, и демонстрирует процесс рефакторинга, в ходе которого объем модуля для отправки имейлов удалось сократить с 660 строк кода до 15 – без потери функциональности. |
Понять, что вашему коду не нужны классы, очень просто: - если в классе всего 2 метода, один из которых __init__
- если экземпляр класса создается и используется лишь однажды
…то лучше обойтись функцией. А в качестве примера кода, при написании которого вместо использования нескольких классов проще обойтись словарем, автор приводит вариант реализации игры «Жизнь» Джона Конвея. |
🛡️ 4 безопасных способа выполнения ненадежного Python-кода
|
Туториал «Как сделать онлайн-редактор для Python с использованием Ace» показывает процесс создания простейшей IDE для выполнения на бэкенде кода, полученного от пользователя с фронтенда. В проекте используются Django и популярный редактор Ace.js . Следует заметить, что подобный проект можно сделать только в качестве Proof of concept или для тренировки навыков работы с фронтендом: запускать таким образом на бэкенде код, полученный от пользователей, ни в коем случае нельзя.
Есть 4 основных подхода к созданию браузерных IDE для безопасного запуска пользовательского кода:
Запуск кода в изолированном окружении (контейнер, виртуальная машина). Этот метод используют все онлайн-тренажеры. Вот статья на Хабре о процессе создания такой песочницы для платформы Яндекс Практикум. Подход с использованием виртуальной машине применяется на сайте Школа программиста.
2. Использование максимально урезанной версии интерпретатора. О сложностях этого подхода – в выступлении Джессики Маккелар. 3. Транспиляция Python в JavaScript и выполнение кода на фронтенде (Brython, PyScript, Skulpt). Этот подход хорош всем, кроме того, что не поддерживает большинство встроенных библиотек, не говоря уже о сторонних.
4. Исполнение кода с помощью Pyodide в WebAssembly/Emscripten. В этом репозитории есть пример IDE на Django/Ace, которая безопасно выполняет любой Python-код, используя Pyodide и WebAssembly. При этом подходе можно использовать micropip для установки большинства популярных библиотек и фреймворков. |
🔥 Новая альтернатива PyTorch |
Burn – гибкий и производительный фреймворк для глубокого обучения на языке Rust. Основные преимущества: - Высокая производительность. Burn использует несколько оптимизационных техник (автоматические ядерные методы, асинхронное выполнение, интеллектуальное управление памятью и другие) для достижения максимальной эффективности.
- Упрощенные процессы обучения и развертывания. Burn позволяет легко организовать весь процесс обучения и деплоя нейросетей – от мониторинга процесса обучения до развертывания модели на разных устройствах.
- Гибкость. Фреймворк может работать на любой платформе – от встраиваемых устройств до кластеров мощных GPU.
- Расширяемость. Архитектура Burn позволяет расширять существующие или добавлять новые бэкенды для поддержки дополнительных возможностей вроде автодифференцирования.
На примере переноса предобученной нейронной сети ResNet из PyTorch в Burn автор демонстрирует все основные методы работы с новым фреймворком: - Определение архитектуры с использованием модулей (Module). Это позволяет определить основные блоки сети – BasicBlock и Bottleneck.
- Импорт предобученных весов модели из PyTorch с помощью утилиты PyTorchFileRecorder. При этом выполняется сопоставление имен слоев модели.
- Сохранение загруженных весов в один из поддерживаемых форматов Burn, чтобы в дальнейшем не конвертировать словарь состояний PyTorch каждый раз.
- Загрузка тестового изображения собаки и преобразование его в тензор, необходимый для вывода модели. Выполняются масштабирование, нормализация и другие операции предобработки.
- Тестирование нейросети (определение породы собаки на фото).
|
Для форматирования текстового вывода в Python чаще всего используют f-строки. Встроенный модуль textwrap не пользуется особой популярностью, и как показывает автор этого поста, – зря: в нем есть несколько классных фич. Вот его основные возможности. shorten – обрезает строку до нужного количества символов, указатель на продолжение можно кастомизировать: |
wrap – разделяет текст на фрагменты нужного размера, которые можно использовать для пакетной обработки: |
TextWrapper – используется для многократного вызова wrap и для применения к тексту множества дополнительных параметров форматирования: |
dedent – для автоматического удаления отступов: |
indent – для добавления нужного количества отступов: |
На этом все, увидимся через неделю! |
|
|
Вы получили это письмо, потому что подписались на нашу рассылку. Если вы больше не хотите получать наши письма, нажмите здесь.
|
|
|
|