# Menggunakan sample-factory di Hugging Face

[`sample-factory`](https://github.com/alex-petrenko/sample-factory) adalah basis kode untuk pembelajaran penguatan asinkron dengan throughput tinggi. Basis kode ini memiliki integrasi dengan Hugging Face Hub untuk berbagi model beserta hasil evaluasi dan metrik pelatihan.

## Menjelajahi sample-factory di Hub

Anda dapat menemukan model `sample-factory` dengan memfilter di sisi kiri [halaman model](https://huggingface.co/models?library=sample-factory).

Semua model di Hub dilengkapi dengan fitur yang berguna:
1. Kartu model yang dihasilkan secara otomatis dengan deskripsi, konfigurasi pelatihan, dan lainnya.
2. Tag metadata yang membantu untuk kemudahan penemuan.
3. Hasil evaluasi untuk dibandingkan dengan model lain.
4. Widget video tempat Anda dapat menonton agen Anda beraksi.

## Instal pustaka
Untuk menginstal pustaka `sample-factory`, Anda perlu menginstal paket:

`pip install sample-factory`

SF diketahui dapat berjalan di Linux dan MacOS. Saat ini, tidak ada dukungan untuk Windows.

## Memuat model dari Hub
### Menggunakan load_from_hub

Untuk mengunduh model dari Hugging Face Hub untuk digunakan dengan Sample-Factory, gunakan skrip `load_from_hub`:

```
python -m sample_factory.huggingface.load_from_hub -r <HuggingFace_repo_id> -d <train_dir_path>
```

Argumen baris perintahnya adalah:

- `-r`: ID repo untuk repositori HF yang akan diunduh. ID repo harus dalam format `<username>/<repo_name>`
- `-d`: Argumen opsional untuk menentukan direktori tempat eksperimen disimpan. Nilainya secara default adalah `./train_dir` yang akan menyimpan repo ke `./train_dir/<repo_name>`

### Unduh Repositori Model Secara Langsung

Repositori Hugging Face dapat diunduh langsung menggunakan `git clone`:

```
git clone git@hf.co:<Name of HuggingFace Repo> # example: git clone git@hf.co:bigscience/bloom
```

## Menggunakan Model yang Diunduh dengan Sample-Factory

Setelah mengunduh model, Anda dapat menjalankan model di repo dengan skrip enjoy yang sesuai dengan lingkungan Anda. Misalnya, jika Anda mengunduh model `mujoco-ant`, model tersebut dapat dijalankan dengan:

```
python -m sf_examples.mujoco.enjoy_mujoco --algo=APPO --env=mujoco_ant --experiment=<repo_name> --train_dir=./train_dir
```

Perlu dicatat, Anda mungkin perlu menentukan `--train_dir` jika path lokal train_dir Anda berbeda dengan yang ada di `cfg.json`

## Berbagi model Anda
### Menggunakan push_to_hub

Jika Anda ingin mengunggah tanpa menghasilkan metrik evaluasi atau video replay, Anda dapat menggunakan skrip `push_to_hub`:

```
python -m sample_factory.huggingface.push_to_hub -r <hf_username>/<hf_repo_name> -d <experiment_dir_path>
```

Argumen baris perintahnya adalah:

- `-r`: repo_id untuk disimpan di HF Hub. Ini sama dengan `hf_repository` di skrip enjoy dan harus dalam bentuk `<hf_username>/<hf_repo_name>`
- `-d`: Path lengkap ke direktori eksperimen Anda untuk diunggah

### Menggunakan enjoy.py

Anda dapat mengunggah model Anda ke Hub menggunakan skrip `enjoy` dari lingkungan Anda dengan flag `--push_to_hub`. Mengunggah menggunakan `enjoy` juga dapat menghasilkan metrik evaluasi dan video replay.

Metrik evaluasi dihasilkan dengan menjalankan model Anda pada lingkungan yang ditentukan selama sejumlah episode dan melaporkan rata-rata serta standar deviasi reward dari eksekusi tersebut.

Argumen baris perintah lain yang relevan adalah:

- `--hf_repository`: Repositori yang akan dituju untuk push. Harus dalam bentuk `<username>/<repo_name>`. Model akan disimpan ke `https://huggingface.co/<username>/<repo_name>`
- `--max_num_episodes`: Jumlah episode yang dievaluasi sebelum diunggah. Digunakan untuk menghasilkan metrik evaluasi. Disarankan untuk menggunakan beberapa episode guna menghasilkan rata-rata dan standar deviasi yang akurat.
- `--max_num_frames`: Jumlah frame yang dievaluasi sebelum diunggah. Alternatif untuk `max_num_episodes`
- `--no_render`: Flag yang menonaktifkan rendering dan tampilan langkah-langkah lingkungan. Disarankan untuk mengatur flag ini guna mempercepat proses evaluasi.

Anda juga dapat menyimpan video model selama evaluasi untuk diunggah ke hub dengan flag `--save_video`

- `--video_frames`: Jumlah frame yang akan dirender dalam video. Nilainya secara default -1, yang merender seluruh episode
- `--video_name`: Nama video untuk disimpan. Jika `None`, akan disimpan sebagai `replay.mp4` di direktori eksperimen Anda

Sebagai contoh:

```
python -m sf_examples.mujoco_examples.enjoy_mujoco --algo=APPO --env=mujoco_ant --experiment=<repo_name> --train_dir=./train_dir --max_num_episodes=10 --push_to_hub --hf_username=<username> --hf_repository=<hf_repo_name> --save_video --no_render
```

