# Music Mind [Aplikacja gradio projektu](https://huggingface.co/spaces/bjpietrzak/music_mind) ## CI/CD Pipeline ### 1. **Wybór modelu** Jeśli model nie pochodzi z biblioteki HF, trzeba się upewnić, że jest kompatybilny z klasą Trainer biblioteki HuggingFace [LINK](https://huggingface.co/transformers/v3.3.1/training.html) ### 2. **Wybór danych trenujących** Jeżeli dataset pochodzi z biblioteki HuggingFace, można ten krok pominąć. 1. Zbór uczący musi posiadać: - Pliki muzyczne w formacie; znajdujące się w jednym folderze `[.ogg, .mp3 .wav]` - Plik json zawierający oznaczenia dla wszystkich plików muzycznych: ```json { "file1.ogg": "jazz", "file2.ogg": "hiphop" } ``` 2. Aby dataset miał formę kompatybilną z trenerem HF, dostępny zbiór danych należy sparsować za pomocą skryptu `make_dataset.py` znajdującego się w katalogu `dl/` projektu: ```bash python make_dataset.py --dir sciezka/do/folderu/plikow/audio --file sciezka/do/pliku/json.json --output lokalizacja/wygenerowanego/datasetu ``` ### 3. **Trening Modelu** Trening modelu odbywa się poprzez skrypt `train.py` znajdujący się w katalogu `/dl/` projektu. Skrupt posiada następujące flagi: - learning_rate: Współczynnik uczenia podczas treningu modelu. - train_eval_split: Stosunek danych trenujących do całego zbioru; reszta to dane walidacyjne. - model_id: Identyfikator modelu z Hugging Face lub ścieżka do lokalnego modelu. - num_epochs: Liczba epok treningowych. - seed: Ziarno liczb losowych. - save_dir: Ścieżka do katalogu wag tranowanego modelu. - dataset: Nazwa/lokalizacja zbioru danych. Przykładowe uruchomienie skryptu: ```bash python train_audio_model.py --model_id "facebook/wav2vec2-base-960h" --learning_rate 0.0001 --train_eval_split 0.8 --num_epochs 10 --seed 42 --save_dir "/path/to/save/models" --dataset "marsyas/gtzan" ``` Wagi i pliki konfiguracyjne modelu zostaną zapisane w podanej ścierzce pod nazwą składającą się z parametrów uczenia np: `/path/to/save/facebook-wav2vec2-base-960h-123-marsyas-gtzan-0.0001` ### 4. **Wersjonowanie modelów** Modele można przesyłać do repozytorium na huggingface. Za pomocą skryptu `push_model.py`: ```bash python script_name.py --username your_username --model_dir /path/to/your/model --repo_name your_repo_name --private True ``` lub za pomocą GUI strony HuggingFace [LINK](https://huggingface.co/new) ![Widok strony początkowej zakładania repozytorium modelu](images/new.png) ![Dodawanie plików do repozytorium](images/file_upload.png) Na stronie: ![alt text](images/new.png) ![alt text](images/file_upload.png) ### 6. **Aktualizowanie modelu w deployowanej aplikacji** Po dodaniu modelu do repozytorium należy go wykorzystać w deployowanej aplikacji dostępnej pod tym adresem: `git clone https://huggingface.co/spaces/bjpietrzak/music_mind` W katalogu głównym projektu znajduje się plik `main.py`. W jego wnętrzu znajduje się zmienna config: ```py config = { "sampling_rate": 16000, "model": "bjpietrzak/distilhubert-gtzan-20-5e-5", } ``` Nazwę repozytorium, oraz model można umieścić w wartości klucza `model`, jeśli jest taka potrzeba, należy zmienić sampling rate. Po zmianie zmian, należy je pchnąć: ```bash git push ``` Zmiany powinny być widoczne po kilku minutach: ![alt text](images/changes.png)