# Usando MLX no Hugging Face

[MLX](https://github.com/ml-explore/mlx) é um framework de treinamento e serviço de modelos para Apple silicon, desenvolvido pela Apple Machine Learning Research.

Ele vem com uma variedade de exemplos:

- [Gerar texto com MLX-LM](https://github.com/ml-explore/mlx-lm/tree/main) e [gerar texto com MLX-LM para modelos no formato GGUF](https://github.com/ml-explore/mlx-examples/tree/main/llms/gguf_llm).
- Geração de texto em larga escala com [LLaMA](https://github.com/ml-explore/mlx-examples/tree/main/llms/llama).
- Fine-tuning com [LoRA](https://github.com/ml-explore/mlx-examples/tree/main/lora).
- Gerando imagens com [Stable Diffusion](https://github.com/ml-explore/mlx-examples/tree/main/stable_diffusion).
- Reconhecimento de fala com [Whisper da OpenAI](https://github.com/ml-explore/mlx-examples/tree/main/whisper).

## Explorando o MLX no Hub

Você pode encontrar modelos MLX filtrando à esquerda na [página de modelos](https://huggingface.co/models?library=mlx&sort=trending). Há também uma [comunidade MLX](https://huggingface.co/mlx-community) aberta de contribuidores convertendo e publicando pesos para o formato MLX.

Graças à integração do MLX com o Hugging Face Hub, você pode carregar modelos MLX com poucas linhas de código.

## Instalação

O MLX é disponibilizado como um pacote independente, e há um subpacote chamado MLX-LM com integração do Hugging Face para Large Language Models. Para instalar o MLX-LM, você pode usar a seguinte instalação em uma linha através do `pip`:

```bash
pip install mlx-lm
```

Você pode obter mais informações sobre isso [aqui](https://github.com/ml-explore/mlx-lm/tree/main).

Se você instalar `mlx-lm`, não precisa instalar `mlx`. Se você não quiser usar `mlx-lm` e apenas o MLX, pode instalar o próprio MLX da seguinte forma.

Com `pip`:

```bash
pip install mlx
```

Com `conda`:

```bash
conda install -c conda-forge mlx
```

## Usando Modelos Existentes

O MLX-LM possui utilitários úteis para gerar texto. A linha a seguir baixa e carrega o modelo diretamente e inicia a geração de texto.

```bash
python -m mlx_lm.generate --model mistralai/Mistral-7B-Instruct-v0.2 --prompt "hello"
```

Para obter a lista completa de opções de geração, execute

```bash
python -m mlx_lm.generate --help
```

Você também pode carregar um modelo e começar a gerar texto por meio do Python, como abaixo:

```python
from mlx_lm import load, generate

model, tokenizer = load("mistralai/Mistral-7B-Instruct-v0.2")

response = generate(model, tokenizer, prompt="hello", verbose=True)
```

O MLX-LM suporta arquiteturas populares de LLM, incluindo LLaMA, Phi-2, Mistral e Qwen. Modelos que não são suportados podem ser baixados facilmente da seguinte forma:

Definir `HF_XET_HIGH_PERFORMANCE=1` aumenta os limites de concorrência e os tamanhos de buffer para máquinas com alta largura de banda e pelo menos 64 GB de RAM:

```bash
pip install -U huggingface_hub

export HF_XET_HIGH_PERFORMANCE=1
hf download --local-dir <LOCAL FOLDER PATH> <USER_ID>/<MODEL_NAME>
```

## Convertendo e Compartilhando Modelos

Você pode converter e, opcionalmente, quantizar LLMs do Hugging Face Hub da seguinte forma:

```bash
python -m mlx_lm.convert --hf-path mistralai/Mistral-7B-v0.1 -q 
```

Se você deseja enviar diretamente o modelo após a conversão, pode fazer como abaixo.

```bash
python -m mlx_lm.convert \
    --hf-path mistralai/Mistral-7B-v0.1 \
    -q \
    --upload-repo <USER_ID>/<MODEL_NAME>
```

## Recursos adicionais

* [Repositório MLX](https://github.com/ml-explore/mlx)
* [Documentação do MLX](https://ml-explore.github.io/mlx/)
* [MLX-LM](https://github.com/ml-explore/mlx-lm/tree/main)
* [Exemplos de MLX](https://github.com/ml-explore/mlx-examples/tree/main)
* [Todos os modelos MLX no Hub](https://huggingface.co/models?library=mlx&sort=trending)

