Как настроить Python для науки на M1 Mac
Вступление
Опыт показывает, что установка программ - одна из самых сложных и времязатратных задач в науке. В этой статье я делюсь, как я настроил на своем маке питон для занятия наукой.
Conda
Для управления питоном я предлагаю конду, она нужна для управления окружениями и установки пакетов. Многие спорят, что лучше связка pip + virtualenv, но так вышло, что в науке больше принято использовать конду. Одно из преимуществ - с ее помощью можно устанавливать программы, не относящиеся к питону.
Виртуальное окружение - это отдельная версия питона, набор пакетов для него и набор программ. Хорошей практикой является создавать отдельное окружение для каждого проекта или набора инструментов, чтобы не возникало конфликтов между разными наборами пакетов. Они все лежат в отдельной папке, так что пакет vk-api, который нужен был вам для игрушечного проекта на выходных, никак вам не помешает, когда вы захотите заняться обработкой естественного языка.
Программы, установленные в стандартное окружение base будут видны во всех других окружениях
Miniconda - это минимальный дистрибутив питона с предустановленной кондой. Мы будем устанавливать miniforge - это версия miniconda, которая пользуется для установки пакетов только каналом conda-forge, который управляется сообществом. Сейчас он нас интересует потому что в отличие от miniconda, у miniforge существует версия для M1.
Установка
Miniforge можно установить через brew, я рекомендую этот способ, он самый простой.
brew install miniforge
Использование
Для примера создадим окружение для работы с данными и установим в него некоторые необходимые пакеты. В нашем случае пакет pandas использует numpy как свою зависимость, поэтому конда сама установит и его тоже.
conda create --name ds conda activate ds conda install python=3.10 conda install pandas matplotlib
Mamba
Это альтернатива конде как программе для установки пакетов. Она работает так же как конда и использует ее инфраструктуру, но написана на C++ и умеет загружать пакеты параллельно. Это особенно актуально для науки, потому что здесь пакеты весят особенно много. Прирост в скорости работы становится очень заметен. Достаточно проcто вместо conda install писать mamba install.
Установка Достаточно установить мамбу в базовое окружение, и ей можно будет пользоваться везде.
conda install mamba
Jupyter
Это главное IDE для работы с данными. Я рекомендую работать в JupyterLab, все то же самое, что в классическом notebook, но более модное, свежее и удобное.
Если у вас больше одного проекта, у вас должно быть больше одного окружения, как я уже говорил. Скорее всего вы захотите работать с юпитер ноутбуками больше, чем в одном окружении. Наивное решение - в каждое окружение установить свой юпитер. Но это плохое и неудобное решение. Более элегантно будет установить окружения как ядра в один юпитер, тогда можно будет в одном юпитере одновременно открывать любые проекты и не придется настраивать несколько IDE.
Установка Установим jupyter lab в базовое окружение.
conda install jupyterlab
Затем переключимся в окружение для работы с данными и установим его как ядро.
conda activate ds mamba install -c anaconda ipykernel python -m ipykernel install --user --name=$CONDA_DEFAULT_ENV
TensorFlow
Эпл сделали для тензорфлоу поддержку своего драйвера видеокарт на маках - metal. Теперь можно учить нейронные сети на макбуке. Я решил, что это слишком короткая процедура, чтобы выделять это в отдельную статью, кроме того, она имеет непосредственное отношение к теме.
Установка
Установим тензорфлоу в отдельное окружение. Пока поддерживается только питон 3.9.
conda create --name tf python=3.9 conda activate tf mamba install -c apple tensorflow-deps python -m pip install tensorflow-macos python -m pip install tensorflow-metal
Интересный факт, что в эту технологию по использованию не cuda видеокарт в тензорфлоу очень сильно вложился интел. Просто так случилось, что эпл первее сделала поддержку для своих видеокарт
х86 Conda
Однажды мне нужно было найти олигонуклеотидные последовательности для метода FISH (не спрашивайте). Процедура подбора таких последовательностей включает в себя запуск скриптов на питоне 2 версии. При этом в репозиториях конды для арм архитектуры в принципе нет питона ниже 3.8. Поэтому использовать основную установку конды не получится, даже отделившись в другое окружение.
Можно было бы просто сделать всю эту процедуру на другом компьютере, например на сервере, который предоставлен мне для учебы. Но мне психологически важно, чтобы я на своем личном инструменте имел возможность выполнять свои задачи. Такую проблему можно решить, установив на компьютер еще один дистрибутив конды для x86 архитектуры.
Установка
Уже не получится сделать через брю, нужно скачать установщик и установить через него. Чтобы установить miniforge для x86 архитектуры, можно использовать команду arch. Она позволяет запустить программу в командной строке через Rosetta 2, которая эмулирует заданную архитектуру.
arch -x86_64 /bin/bash Downloads/Miniforge3-MacOSX-x86_64.sh
Для установки я выбираю путь ~/miniforgex86. Не соглашаюсь инициализировать конду, потому что у меня уже инициализируется другая версия.
Далее в файле настроек .zshrc я дописываю следующие строки. Они добавляют соответствующие команды. Это нужно, чтобы иметь быстрый доступ к инструментам.
alias condax86="arch -x86_64 /Users/$(whoami)/miniforgex86/condabin/conda" alias pythonx86="arch -x86_64 /Users/$(whoami)/miniforgex86/bin/python"
Использование Теперь я могу создать окружение с x86 инструментами, и моя основная нативная версия конды будет видеть его.
condax86 create --name py2 python=2.7 conda env list /Users/kirilldenisov/miniforgex86/envs/py2 base * /opt/homebrew/Caskroom/miniforge/base ds /opt/homebrew/Caskroom/miniforge/base/envs/ds tf /opt/homebrew/Caskroom/miniforge/base/envs/tf
Правда, не будет видно названия окружения, нужно будет активировать, вводя путь целиком. Устанавливать в него пакеты нужно с помощью condax86.
conda activate /Users/kirilldenisov/miniforgex86/envs/py2 condax86 install biopython
Комментируйте, ставьте реакции, рассказывайте друзьям и подписывайтесь на телеграм канал!