Tur berpemandu tentang cara menginstal pytorch
yang dioptimalkan dan MLX
baru Apple dan/atau tensorflow
atau JAX
opsional dari Apple di Apple Silicon Mac dan cara menggunakan model bahasa besar HuggingFace
untuk eksperimen Anda sendiri. Mac terbaru menunjukkan kinerja yang baik untuk tugas pembelajaran mesin.
Kami akan melakukan langkah-langkah berikut:
homebrew
pytorch
dengan dukungan MPS (metal performance shader) menggunakan GPU Apple Siliconmlx
baru AppleJAX
dengan driver logam Apple (saat ini masih bersifat eksperimental (2024-07), dan tidak selalu mutakhir.)tensorflow
dengan pengoptimalan driver logam pluggable logam dari Applejupyter lab
untuk menjalankan notebookhuggingface
dan jalankan beberapa model bahasa terlatih menggunakan transformers
dan hanya beberapa baris kode dalam lab jupyter.Kemudian kami memberikan HowTos tambahan untuk:
(lewati ke 1. Persiapan jika Anda tahu framework mana yang akan Anda gunakan)
Tensorflow, JAX, Pytorch, dan MLX adalah framework pembelajaran mendalam yang menyediakan pustaka yang diperlukan untuk melakukan operasi tensor optimal yang digunakan dalam pelatihan dan inferensi. Pada tingkat tinggi, fungsi keempatnya setara. Huggingface dibangun di atas salah satu kerangka kerja tersebut dan menyediakan perpustakaan besar model terlatih untuk berbagai kasus penggunaan, siap digunakan atau disesuaikan ditambah sejumlah perpustakaan praktis dan kode sampel untuk memudahkan memulai.
jax-metal
tidak selalu mutakhir dengan versi terbaru JAX
.HuggingFace menerbitkan Ikhtisar dukungan model untuk setiap kerangka kerja. Saat ini, Pytorch merupakan standar defacto, jika Anda ingin menggunakan model yang sudah ada.
Untuk jawaban (mungkin terlalu disederhanakan) atas pertanyaan "Apa yang tercepat?" lihat Benchmark 02 notebook Jupyter, dan setelah Anda menyelesaikan instalasi, Anda dapat menguji lingkungan Anda sendiri. Notebook ini memungkinkan untuk membandingkan kecepatan perkalian matriks untuk kerangka kerja yang berbeda. Namun, perbedaan antara kerangka kerja saat melakukan pelatihan model 'standar' atau tugas inferensi kemungkinan besar tidak terlalu terlihat.
Jika Anda belum melakukannya, buka https://brew.sh/ dan ikuti petunjuk untuk menginstal homebrew. Setelah selesai, buka terminal dan ketik brew --version
untuk memeriksa apakah sudah diinstal dengan benar.
Sekarang gunakan brew
untuk menginstal versi python
dan git
yang lebih baru. Rekomendasinya adalah menggunakan Python 3.12 default Homebrew, jika Anda tidak berencana menggunakan Tensorflow dengan pengoptimalan Metal (masih memerlukan 3.11 (pada 04-2024)).
brew install [email protected] git
brew install [email protected] git
Anda dapat menginstal kedua versi Python dan kemudian membuat lingkungan virtual menggunakan versi python spesifik yang Anda perlukan untuk setiap kasus.
Jika Anda juga berencana menggunakan Linux, ketahuilah bahwa dukungan versi Python terkadang berbeda antara kerangka kerja versi Mac dan Linux.
Apple tidak menghabiskan terlalu banyak energi untuk memperbarui python MacOS. Jika Anda ingin menggunakan python default terbaru, masuk akal untuk menjadikan python homebrew sebagai python sistem default. Jadi, jika Anda ingin menggunakan sistem Python 3.11 atau 3.12 homebrew secara global, cara termudah untuk melakukannya (setelah
brew install [email protected]
atau3.11
):
Edit ~/.zshrc
dan masukkan:
# This is OPTIONAL and only required if you want to make homebrew's Python 3.12 as the global version:
export PATH= " /opt/homebrew/opt/[email protected]/bin: $PATH "
export PATH=/opt/homebrew/opt/[email protected]/libexec/bin: $PATH
Ubah semua referensi 3.12
menjadi 3.11
ketika ingin membuat python standar sistem Python 3.11 homebrew.
(Mulai ulang terminal Anda untuk mengaktifkan perubahan jalur, atau masukkan source ~/.zshrc
di sesi terminal Anda saat ini.)
Terlepas dari sistem python yang digunakan, saat membuat lingkungan virtual, Anda selalu dapat memilih versi python tertentu yang ingin Anda gunakan di
venv
dengan membuatvenv
menggunakan python tersebut. Misalnya/usr/bin/python3 -m venv my_venv_name
membuat lingkungan virtual menggunakan macOS python Apple (yang pada saat penulisan ini, 2024-07, masih terhenti di 3.9.6). Lihat di bawah, Lingkungan virtual , untuk detail selengkapnya.
Sekarang kloning proyek ini sebagai proyek uji:
git clone https://github.com/domschl/HuggingFaceGuidedTourForMac
Ini mengkloning proyek uji ke dalam direktori HuggingFaceGuidedTourForMac
Sekarang buat lingkungan Python 3.12 untuk proyek ini dan aktifkan:
(Sekali lagi: ganti dengan 3.11
, jika perlu)
python3.12 -m venv HuggingFaceGuidedTourForMac
Membuat venv menambahkan file yang diperlukan (biner python, perpustakaan, konfigurasi) untuk lingkungan python virtual ke folder proyek yang baru saja kita klon, menggunakan lagi direktori yang sama HuggingFaceGuidedTourForMac
. Masuk ke direktori dan aktifkan lingkungan virtual:
cd HuggingFaceGuidedTourForMac
source bin/activate
Sekarang direktori HuggingFaceGuidedTourForMac
berisi konten repositori github (misalnya 00-SystemCheck.ipynb
) dan file untuk virtual env (misalnya bin
, lib
, etc
, include
, share
, pyvenv.cfg
):
Alternatif: Jika Anda menginstal banyak versi python yang berbeda, Anda dapat membuat lingkungan yang menggunakan versi tertentu dengan menentukan jalur python yang digunakan untuk membuat venv
, misalnya:
/opt/homebrew/opt/[email protected]/bin/python3.12 -m venv my_new_312_env
menggunakan python homebrew secara eksplisit untuk membuat venv
baru, sedangkan
/usr/bin/python3 -m venv my_old_system_venv
akan menggunakan versi macOS python Apple untuk lingkungan baru.
Nonaktifkan lingkungan virtual ini, cukup gunakan:
deactivate
Untuk mengaktifkannya kembali, masuk ke direktori yang berisi venv
, di sini: HuggingFaceGuidedTourForMac
dan gunakan:
source bin/activate
venv
Properti
venv
yang sangat tidak intuitif adalah faktanya: saat Anda memasuki suatu lingkungan dengan mengaktifkannya di subdirektori proyek Anda (dengansource bin/activate
),venv
tetap aktif ketika Anda meninggalkan folder proyek dan mulai mengerjakan sesuatu yang sama sekali berbeda hingga Anda secara eksplisit menonaktifkanvenv
dengandeactivate
.Ada sejumlah alat yang memodifikasi prompt sistem terminal untuk menampilkan
venv
yang sedang aktif, yang merupakan hal yang sangat membantu. Lihat kapal luar angkasa (disarankan), atau, jika Anda suka hiasanOh My Zsh
.
Contoh dengan powerlevel10k
terinstal. Sisi kiri prompt sistem menunjukkan direktori saat ini, sisi kanan akan menampilkan nama venv
. Saat ini, tidak ada venv
yang aktif.
Setelah mengaktifkan venv
di HuggingFaceGuidedTourForMac
:
Meskipun direktori kerjanya diubah (di sini menjadi home
), karena venv
masih aktif, namanya ditampilkan di sisi kanan dengan powerlevel10k
. Sangat berguna.
Lihat https://docs.python.org/3/tutorial/venv.html untuk informasi selengkapnya tentang lingkungan virtual Python.
pytorch
Pastikan lingkungan virtual Anda aktif dengan pip -V
(huruf besar V), ini akan menunjukkan jalur untuk pip
dalam proyek Anda:
<your-path>/HuggingFaceGuidedTourForMac/lib/python3.12/site-packages/pip (python 3.12)
Mengikuti https://pytorch.org
, kami akan menginstal Pytorch dengan pip
. Anda memerlukan setidaknya versi 2.x (default sejak 2023) untuk mendapatkan dukungan MPS (Metal Performance Shaders) dalam pytorch, yang menawarkan keunggulan kinerja signifikan di Apple Silicon.
Untuk menginstal pytorch
ke venv
:
pip install -U torch numpy torchvision torchaudio
Untuk menguji apakah pytorch
diinstal dengan benar, dan shader kinerja logam MPS tersedia, buka terminal, ketik python
dan di dalam shell python, masukkan:
import torch
# check if MPS is available:
torch . backends . mps . is_available ()
Ini harus mengembalikan True
.
MLX
pip install -U mlx
Sekali lagi, mulai python
dan masukkan:
import mlx . core as mx
print ( mx . __version__ )
Ini harus mencetak versi, seperti 0.16.1
(2024-07)
JAX
JAX adalah pilihan yang sangat baik, jika pengoptimalan algoritme tingkat rendah dan penelitian di luar batas algoritme pembelajaran mendalam yang sudah ada adalah fokus Anda. Dimodelkan setelah numpy
, ia mendukung diferensiasi otomatis 'segalanya' (untuk masalah pengoptimalan) dan mendukung vektorisasi dan paralelisasi algoritme python lebih dari sekadar pembelajaran mendalam. Untuk mendapatkan fungsionalitas yang diharapkan dari kerangka pembelajaran mendalam lainnya (lapisan, fungsi loop pelatihan, dan 'tingkat tinggi' serupa), pertimbangkan untuk menginstal pustaka jaringan saraf tambahan seperti: flax
.
Sayangnya, driver JAX
metal sudah mulai tertinggal dari rilis JAX, dan oleh karena itu Anda perlu memeriksa tabel kompatibilitas untuk versi JAX
yang didukung dan cocok dengan driver jax-metal
yang tersedia.
Untuk menginstal versi JAX
tertentu dan jax-metal
terbaru dengan pip
ke lingkungan aktif:
# The version 0.4.26 is taken from the compatibility table mentioned above. Update as required.
pip install -U jax==0.4.26 jaxlib==0.4.26 jax-metal
Mulai python
(3.12 didukung) dan masukkan:
import jax
print ( jax . devices ()[ 0 ])
Ini akan ditampilkan (hanya saat pertama kali dijalankan):
Platform 'METAL' is experimental and not all JAX functionality may be correctly supported!
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
W0000 00:00:1721975334.430133 43061 mps_client.cc:510] WARNING: JAX Apple GPU support is experimental and not all JAX functionality is correctly supported!
Metal device set to: Apple M2 Max
systemMemory: 32.00 GB
maxCacheSize: 10.67 GB
I0000 00:00:1721975334.446739 43061 service.cc:145] XLA service 0x60000031d100 initialized for platform METAL (this does not guarantee that XLA will be used). Devices:
I0000 00:00:1721975334.446771 43061 service.cc:153] StreamExecutor device (0): Metal, <undefined>
I0000 00:00:1721975334.448269 43061 mps_client.cc:406] Using Simple allocator.
I0000 00:00:1721975334.448308 43061 mps_client.cc:384] XLA backend will use up to 22906109952 bytes on device 0 for SimpleAllocator.
[METAL(id=0)]
Di sini METAL:0
adalah perangkat yang akan digunakan JAX untuk penghitungan, dan Apple Silicon didukung.
Jika, Anda melihat kesalahan seperti:
RuntimeError: Unable to initialize backend 'METAL': INVALID_ARGUMENT: Mismatched PJRT plugin PJRT API version (0.47) and framework PJRT API version 0.54). (you may need to uninstall the failing plugin package, or set JAX_PLATFORMS=cpu to skip this backend.)
Versi jax
dan jaxlib
Anda tidak kompatibel dengan jax-metal
. Periksa tabel kompatibilitas untuk jax-metal
dan instal versi yang diperlukan seperti yang ditunjukkan dalam tabel.
tensorflow
Tensorflow kehilangan dukungan dengan cepat, dan bahkan Google tidak memublikasikan model baru untuk Tensorflow. Rencana migrasi disarankan, jika Anda berencana menggunakan ini.
Meskipun Tensorflow mendukung Python 3.12 sejak 2.16, akselerator
tensorflow-metal
macOS belum diperbarui sejak 2023-09 (status 2024-07) dan memerlukan Python 3.11:
Pastikan lingkungan virtual Anda aktif dengan pip -V
(huruf besar V), ini akan menunjukkan jalur untuk pip
dalam proyek Anda:
<your-path>/HuggingFaceGuidedTourForMac/lib/python3.11/site-packages/pip (python 3.11)
Mengikuti https://developer.apple.com/metal/tensorflow-plugin/, kami akan menginstal tensorflow
dengan pip
di dalam venv
kami :
pip install -U tensorflow tensorflow-metal
Untuk menguji apakah tensorflow
terpasang dengan benar, buka terminal, ketik python
dan di dalam shell python, masukkan:
import tensorflow as tf
tf . config . list_physical_devices ( 'GPU' )
Anda akan melihat sesuatu seperti:
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
Pada titik ini, Apple Silicon Mac Anda harus siap menjalankan pytorch
dan opsional MLX
dan/atau JAX
atau tensorflow
dengan dukungan akselerasi perangkat keras, menggunakan kerangka Apple Metal.
Untuk mengujinya, Anda dapat menggunakan jupyter lab
untuk menjalankan beberapa notebook. Untuk menginstal jupyter lab
, pertama-tama pastikan lingkungan virtual yang ingin Anda gunakan aktif ( pip -V
), dan ketik:
pip install -U jupyterlab ipywidgets
Jika Anda menginstal versi Jupyter lain, jalur ke versi jupyter yang baru diinstal dalam
venv
sering kali tidak diperbarui dengan benar, aktifkan kembali lingkungan untuk memastikan bahwa versi Jupyter lokal yang benar digunakan:
deactivate
source bin/activate
Untuk memulai lab Jupyter, ketik:
jupyter lab
Ini akan membuka jendela browser dengan jupyter lab
berjalan. Anda kemudian dapat membuat notebook python baru dan menjalankan beberapa kode untuk menguji apakah tensorflow
dan pytorch
berfungsi dengan benar:
import torch
print ( "Pytorch version:" , torch . __version__ )
Jika ini berhasil diselesaikan, Mac Anda sekarang siap untuk eksperimen Pembelajaran Mendalam.
HuggingFace adalah sumber yang bagus untuk eksperimen NLP dan Pembelajaran Mendalam. Ini menyediakan sejumlah besar model bahasa terlatih dan API sederhana untuk menggunakannya. Ini akan memungkinkan kita memulai eksperimen Pembelajaran Mendalam dengan cepat.
transformers
Dari petunjuk instalasi pelukan, kami menggunakan pip
untuk memasang transformers
:
pip install -U transformers accelerate " huggingface_hub[cli] "
Saat bereksperimen dengan HuggingFace, Anda akan mengunduh model besar yang akan disimpan di direktori home Anda di:
~/.cache/huggingface/hub
. Anda dapat menghapus model ini kapan saja dengan menghapus direktori ini atau sebagian isinya.
accelerate
adalah opsional, tetapi digunakan untuk menjalankan beberapa model besar. Efek samping dari pemasangan accelerate
mungkin berupa penurunan versi beberapa modul lain seperti numpy
."huggingface_hub[cli]"
menginstal alat baris perintah huggingface yang terkadang diperlukan untuk mengunduh model (berlisensi kepemilikan sebagian) seperti Llama 3. Di dalam direktori HuggingFaceGuidedTourForMac
dan venv
aktif, mulai jupyter lab
dan muat notebook 00-SystemCheck.ipynb
. Notebook pertama-tama akan memeriksa semua kerangka pembelajaran mendalam dan memberikan informasi, apakah sudah diinstal dengan benar. Setelah itu, Pytorch digunakan untuk eksperimen sederhana.
Gunakan <Shift>-Enter
untuk menjalankan sel buku catatan.
Jika Anda memulai Jupyter Lab sebelum menginstal Huggingface, Anda perlu me-restart kernel python di Jupyter atau cukup me-restart Jupyter Lab, jika tidak maka perpustakaan Transformers tidak akan ditemukan.
Setelah berbagai tes, Anda akhirnya akan melihat sesuatu seperti ini:
Jika Anda telah menerima klasifikasi label POSITIVE
dengan skor 0.99
, maka Anda siap untuk mulai bereksperimen dengan HuggingFace!
Anda akan melihat bahwa pustaka
HuggingFace
mengunduh segala jenis blob biner besar yang berisi data model terlatih. Data tersebut disimpan di direktori home Anda di:~/.cache/huggingface/hub
. Anda dapat menghapus model ini kapan saja dengan menghapus direktori ini atau sebagian isinya.
Anda dapat membuka notebook 01-ChatBot.ipynb
untuk mencoba chatbot yang sangat sederhana di Mac Anda.
Kode python yang digunakan adalah:
import torch
from transformers import AutoModelForCausalLM , AutoTokenizer
from transformers . utils import logging
# Disable warnings about padding_side that cannot be rectified with current software:
logging . set_verbosity_error ()
model_names = [ "microsoft/DialoGPT-small" , "microsoft/DialoGPT-medium" , "microsoft/DialoGPT-large" ]
use_model_index = 1 # Change 0: small model, 1: medium, 2: large model (requires most resources!)
model_name = model_names [ use_model_index ]
tokenizer = AutoTokenizer . from_pretrained ( model_name ) # , padding_side='left')
model = AutoModelForCausalLM . from_pretrained ( model_name )
# The chat function: received a user input and chat-history and returns the model's reply and chat-history:
def reply ( input_text , history = None ):
# encode the new user input, add the eos_token and return a tensor in Pytorch
new_user_input_ids = tokenizer . encode ( input_text + tokenizer . eos_token , return_tensors = 'pt' )
# append the new user input tokens to the chat history
bot_input_ids = torch . cat ([ history , new_user_input_ids ], dim = - 1 ) if history is not None else new_user_input_ids
# generated a response while limiting the total chat history to 1000 tokens,
chat_history_ids = model . generate ( bot_input_ids , max_length = 1000 , pad_token_id = tokenizer . eos_token_id )
# pretty print last ouput tokens from bot
return tokenizer . decode ( chat_history_ids [:, bot_input_ids . shape [ - 1 ]:][ 0 ], skip_special_tokens = True ), chat_history_ids
history = None
while True :
input_text = input ( "> " )
if input_text in [ "" , "bye" , "quit" , "exit" ]:
break
reply_text , history_new = reply ( input_text , history )
history = history_new
if history . shape [ 1 ] > 80 :
old_shape = history . shape
history = history [:, - 80 :]
print ( f"History cut from { old_shape } to { history . shape } " )
# history_text = tokenizer.decode(history[0])
# print(f"Current history: {history_text}")
print ( f"D_GPT: { reply_text } " )
Ini menunjukkan chatbot (cukup terbatas dan berulang) menggunakan model DialoGPT Microsoft.
Hal yang perlu dicoba:
use_model_index
antara 0..2
, Anda dapat memilih model bahasa kecil, sedang, atau besar.history_text
di atas.~/.cache/huggingface/hub
. Barang yang hilang secara otomatis diunduh ulang bila diperlukan. llama.cpp
yang mengimplementasikan kode inferensi yang diperlukan untuk menjalankan LLM dalam kode C++ yang sangat optimal, mendukung akselerasi Metal Mac.Paragraf ini untuk menghapus instalasi conda yang digunakan dalam versi lama panduan ini:
brew uninstall miniconda
Modifikasi tambahan adalah (semuanya tidak aktif, setelah miniconda dihapus):
~/.condarc
(daftar saluran), dan ~/.conda
.~/.zshrc
(atau .bashrc
) untuk pengaturan jalur dan lingkungan.~/.cache/huggingface/hub
. Hapus saja direktorinya. conda
ke pip
dan venv
untuk versi terbaru tensorflow 2.13, Pytorch 2, macOS Sonoma, instalasi kini jauh lebih sederhana.pytorch
v2.0 sekarang dirilis, saluran pytorch-nightly
sekarang dapat digantikan oleh pytorch
dalam petunjuk instalasi. Saluran pytorch-nightly
tidak lagi diperlukan untuk dukungan MPS.