В мире машинного обучения и анализа данных Python давно занимает лидирующую позицию. Однако новые технологии и инструменты постепенно меняют привычные подходы, предлагая уникальные и эффективные альтернативы. Одной из таких инноваций стал Nushell — современная оболочка командной строки, ориентированная на работу со структурированными данными, и её интеграция с библиотекой libtorch, лежащей в основе PyTorch. Недавно я реализовал обучение нейронной сети в Nushell, открыв возможности работы с нейросетями и визуализацией данных напрямую в терминале. Этот опыт совершает революционный шаг в том, как инженеры и исследователи взаимодействуют с данными и моделями машинного обучения в повседневной работе.
Nushell: оболочка нового поколения Nushell отличается от классических UNIX-оболочек, таких как bash или zsh, своей специализацией на структурированных данных. Это делает её более мощным и удобным инструментом для обработки информации, поскольку данные передаются в виде таблиц и записей, а не простого текста. Реализованная на языке Rust, Nushell сочетает быстрое выполнение, строгую типизацию и современную систему плагинов, позволяя расширять функционал и интегрироваться с разнообразными библиотеками и платформами. Одной из ключевых причин, почему я выбрал Nushell для тренировки нейронных сетей, стало желание интегрировать вычисления на GPU и обработку данных непосредственно из командной строки. В отличие от Python, который, будучи языком программирования, не является командной оболочкой, Nushell позволяет передавать данные между инструментами без необходимости многократных импортов и конвертаций, что значительно ускоряет и упрощает анализ.
Nutorch: GPU-вычисления и тензоры в Nushell Чтобы сделать работу с нейронными сетями в Nushell возможной, я разработал плагин Nutorch. Этот инструмент, написанный на Rust, является обёрткой вокруг tch-rs — самого Rust-интерфейса для libtorch, официальной C++ библиотеки, используемой PyTorch. Nutorch обеспечивает создание и манипуляции с тензорами, которые являются базовой структурой данных для нейросетей и аналитики. В Nutorch API максимально адаптирован под привычный PyTorch-стиль, что облегчает переход для тех, кто знаком с этой экосистемой. Но помимо этого, он предоставляет специфические возможности Nushell, например, возможность напрямую передавать данные из результата одной команды в тензоры другой, что сокращает время и ресурсозатраты на преобразования.
Тензоры в Nutorch могут создаваться как из имеющихся данных, так и генерироваться с нуля на выбранном устройстве: CPU, CUDA GPU или Apple M1 GPU (MPS). Все тензоры сохраняются в памяти плагина, которая остаётся активной до десяти секунд после последней команды — этого достаточно для эффективного взаимодействия с данными в рамках рабочей сессии. Termplot: визуализация данных в терминале Вторая важная составляющая моего проекта — Termplot. Этот инструмент, базирующийся на Node.js, запускает безголовый браузер с React-приложением, которое рендерит графики с помощью Plotly.
js и других веб-библиотек. Termplot делает снимок результата и выводит его в терминал с помощью ANSI-цветовых кодов, что позволяет создавать красивые и информативные графики непосредственно в командной строке. Чтобы повысить быстродействие и удобство, я разработал специальный плагин Termplot для Nushell, который поддерживает браузер в фоне. Это резко сократило время отклика с пары секунд до долей секунды — теперь визуализация происходит почти мгновенно, что особенно важно при циклической тренировке нейросетей и наблюдении за метриками в реальном времени. Объединение Nutorch и Termplot: скрипт beautiful.
nu Для более простой и эстетичной генерации конфигураций графиков Plotly я написал скрипт beautiful.nu, который использует популярную цветовую тему Catppuccin. Этот скрипт выступает связующим звеном между тензорными вычислениями Nutorch и визуализацией Termplot, позволяя создавать красочные, читаемые графики без сложных настроек и лишнего кода. Пример экспоненциальной функции в одну строку Чтобы продемонстрировать силу связки Nutorch и Termplot, достаточно привести короткий пример. Команда torch arange 0 10 0.
1 --device mps | torch exp | torch value | [{y: $in}] | beautiful lines | termplot реализует генерацию тензора от 0 до 10 с шагом 0.1 на GPU Apple M1, вычисляет экспоненту для каждого значения, загружает результат обратно в Nushell, преобразует в формат для графика и отрисовывает его в терминале. Такой единичной строкой достигается результат, для которого в иных условиях потребовался бы целый комплексный скрипт и графический интерфейс. Обучение нейронной сети на данных с тремя кластерами Для самой основной задачи машинного обучения — классификации — я сгенерировал набор искусственных данных, содержащий точки, разбитые на три группы. Используя Nutorch, я инициализировал параметры двухслойной нейронной сети с функцией активации ReLU.
Затем создал функции для прямого прохода модели, вычисления кросс-энтропийной функции потерь и обновления весов через стохастический градиентный спуск. Обучение происходило в цикле на заданное количество эпох. Каждые N шагов (например, по 100 эпох) фиксировалось значение ошибки и выводились сообщения о прогрессе. После завершения обучения визуализировались исходные данные, динамика потерь и прогнозы модели с отображением граничных решений. Все графики были построены с помощью Termplot.
Для проверки корректности реализации я воспроизвёл тот же алгоритм на Python, применяя PyTorch и Matplotlib. Благодаря использованию libtorch в ядре обеих технологий и одинаковому фиксированному зерну генератора случайных чисел результаты полностью совпали, что подтверждает точность и надёжность Nushell-решения. Преимущества использования Nushell для работы с машинным обучением Подобный подход демонстрирует, что современные технологии позволяют существенно переосмыслить процесс анализа и обучения. Использование Nushell даёт несколько ключевых преимуществ. Во-первых, взаимодействие с тензорами и операциями над ними происходит в привычной командной строке, что снижает порог входа и облегчает интеграцию с остальными инструментами и скриптами.
Во-вторых, за счёт эффективной работы с структурированными данными коммуникация между различными этапами анализа не требует сложных промежуточных форматов и преобразований. Можно легко подключать сторонние UNIX-утилиты, что увеличивает гибкость и адаптивность процессов. Наконец, визуализация результата происходит быстро и качественно прямо в терминале, что даёт возможность оперативно мониторить состояние обучения и принимать решения без переключения контекста и использования дополнительных GUI. Перспективы развития и применения Сейчас Nushell, Nutorch и Termplot находятся ещё на ранних стадиях развития, однако они уже демонстрируют огромный потенциал. Возможность использовать мощь GPU вычислений и современные методы машинного обучения в командной строке открывает новые горизонты для автоматизации, быстрого прототипирования и обучения моделей прямо в консоли.
Кроме того, гибкий плагинный подход позволяет расширять функциональность, интегрировать новые библиотеки и улучшать визуализацию. В ближайшем будущем подобные инструменты смогут составить конкуренцию привычным языкам и средам анализа, особенно для тех, кто ценит скорость, компактность и мощь терминала. Заключение Опыт обучения нейронной сети с использованием Nushell показывает, что современная командная оболочка способна выйти за границы простого исполнения команд и стать полноценной средой для разработки и исследования в области искусственного интеллекта. Nutorch и Termplot вместе открывают новые возможности для анализа и визуализации прямо в терминале, что полезно как для начинающих, так и для опытных специалистов. Такая интеграция повышает производительность работы, упрощает тестирование и позволят эффективно использовать оборудование, включая GPU, без дополнительных сложных интерфейсов.
Если вы много времени проводите в терминале и хотите быстро и удобно работать с нейросетями, Nushell с пакетами Nutorch и Termplot — достойный инструмент для вашего арсенала.