Skip to content

Latest commit

 

History

History
108 lines (85 loc) · 5.08 KB

macM1setup.md

File metadata and controls

108 lines (85 loc) · 5.08 KB

Mac M1 Silicon Setup

  1. Устанавливаем homebrew https://brew.sh
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

  2. Ставим xcode. Заходим в магазин проложений apple - ищем по ключевому слову и устанавливаем

  3. Ставим cmake через brew brew install cmake

  4. Ставим miniconda для управления пакетами и версиями python

wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
bash Miniforge3-MacOSX-arm64.sh
  1. Даем установку конде принимать пакеты, поставленные pip-ом принимать, как родные - установленные кондой. Это нужно для того, чтобы конда не переустанавливала пакеты, которые были установлены с pip-ом. Дело в том, что для некоторых пакетов конда ставит их не оптимизированными для маковского проца. Например, numpy поставленный через конду будет в 4 раза медленнее на некоторых задачах. conda config --set pip_interop_enabled true

  2. Ставим numpy через pip pip install --no-binary :all: --no-use-pep517 numpy Если эта команда не проходит, то тогда просто pip install numpy

  3. Проверяем работы на тестовом скрипте:

import time
import numpy as np
np.random.seed(42)
a = np.random.uniform(size=(300, 300))
runtimes = 10

timecosts = []
for _ in range(runtimes):
    s_time = time.time()
    for i in range(100):
        a += 1
        np.linalg.svd(a)
    timecosts.append(time.time() - s_time)
    print(f'{timecosts[-1]:.5f}s')

print(f'mean of {runtimes} runs: {np.mean(timecosts):.5f}s')

запускаем через python <имя скрипта>, должно получиться не более 3 секунд на итерацию. Для сравнения - на интеле отрабатывает за 1 секунду, но это супер-оптимизированная библиотечка от интел для вычислений. Не очень актуально уже, но источник для всего этого - https://gist.github.com/MarkDana/a9481b8134cf38a556cf23e1e815dafb https://developer.apple.com/forums/thread/695963

  1. Справка по работе с мини-кондой - точно пригодится: https://docs.conda.io/projects/conda/en/4.6.0/_downloads/52a95608c49671267e40c689e0bc00ca/conda-cheatsheet.pdf

  2. Очень удобно работать с sshfs для монтирования локально данных по ssh - для этого надо поставить 2 пакета по ссылке из статьи ниже. https://www.petergirnus.com/blog/how-to-use-sshfs-on-macos

Далее надо погасить мак и долго держать кнопку питания, чтобы войти в меню загрузки. В меню выбрать через утилиты настройки безопасности и разрешить запуск приложений/расширений от сторонних разработчиков. После этого станет возможным работы с macFUSE. Монтировать диски можно вот такой командой: sshfs username@remote:<удаленный путь> <локальный путь - куда монтировать> -o volname=VOLUME_NAME

  1. Устанавливаем jax, flax для ускоренной работы с многомерными массивами https://developer.apple.com/metal/jax/

python -m pip install numpy wheel ml-dtypes==0.2.0

# obtain JAX source code
git clone https://github.com/google/jax.git --branch jaxlib-v0.4.10 --single-branch
cd jax
# build jaxlib from source, with capability to load plugin
python build/build.py --bazel_options=--@xla//xla/python:enable_tpu=true
# install jaxlib
python -m pip install dist/*.whl
# install jax
python -m pip install jax
python -m pip install jax-metal==0.0.3

Ставим трансформеры

https://huggingface.co/docs/transformers/installation

pip install torch sentencepiece \
  accelerate \
  bitsandbytes \
  transformers==4.30 \
  git+https://github.com/huggingface/peft.git

git+https://github.com/huggingface/transformers.git@15641892985b1d77acc74c9065c332cd7c3f7d7f \

TRANSFORMERS_CACHE - где хранить кеш для моделей трансформеров HF_DATASETS_OFFLINE=1 - прямой выбор данных из кеша, без попытки скачать TRANSFORMERS_OFFLINE=1

pip install auto-gptq \
 git+https://github.com/huggingface/optimum.git

Настраиваем copy path в Finder

https://automationpanda.com/2017/09/07/copying-file-paths-from-finder-in-macos/