# Bắt đầu nhanh

Transformers được thiết kế để nhanh chóng và dễ sử dụng, giúp mọi người có thể bắt đầu học tập hoặc xây dựng với các mô hình transformer.

Số lượng các trừu tượng hướng đến người dùng được giới hạn ở chỉ ba lớp để khởi tạo một mô hình, và hai API cho suy luận hoặc huấn luyện. Hướng dẫn nhanh này giới thiệu các tính năng chính của Transformers và cho bạn thấy cách:

- tải một mô hình được huấn luyện trước
- chạy suy luận với [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline)
- tinh chỉnh một mô hình bằng [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer)

## Cài đặt

Để bắt đầu, chúng tôi khuyến nghị bạn tạo một [tài khoản](https://hf.co/join) Hugging Face. Tài khoản cho phép bạn lưu trữ và truy cập các mô hình, bộ dữ liệu và [Spaces](https://hf.co/spaces) có kiểm soát phiên bản trên [Hub](https://hf.co/docs/hub/index) của Hugging Face, một nền tảng cộng tác để khám phá và xây dựng.

Tạo [User Access Token](https://hf.co/docs/hub/security-tokens#user-access-tokens) và đăng nhập vào tài khoản của bạn.

Dán User Access Token của bạn vào [notebook_login](https://huggingface.co/docs/huggingface_hub/main/en/package_reference/authentication#huggingface_hub.notebook_login) khi được yêu cầu đăng nhập.

```py
from huggingface_hub import notebook_login

notebook_login()
```

Hãy đảm bảo rằng gói [huggingface_hub[cli]](https://huggingface.co/docs/huggingface_hub/guides/cli#getting-started) đã được cài đặt và chạy lệnh bên dưới. Dán User Access Token của bạn khi được yêu cầu để đăng nhập.

```bash
hf auth login
```

Cài đặt PyTorch.

```bash
# remove ! if installing from the CLI
!pip install torch
```

Sau đó, cài đặt phiên bản mới nhất của Transformers cùng một số thư viện bổ sung từ hệ sinh thái Hugging Face để truy cập bộ dữ liệu và mô hình thị giác, đánh giá quá trình huấn luyện và tối ưu hóa huấn luyện cho các mô hình lớn.

```bash
# remove ! if installing from the CLI
!pip install -U transformers datasets evaluate accelerate timm
```

## Kỹ năng của Agent

[Hugging Face Skills](https://github.com/huggingface/skills) dạy cho agent lập trình của bạn cách làm việc với Transformers. Thay vì tự viết script huấn luyện, hãy yêu cầu agent của bạn tinh chỉnh một mô hình thị giác và để skill hướng dẫn nó.

```sh
/plugin marketplace add huggingface/skills
/plugin install hf-cli@huggingface/skills
```

```sh
codex plugin marketplace add huggingface/skills
```

Sau đó, chạy `/plugins` trong Codex và cài đặt một skill từ kho `huggingface/skills`.

Xem hướng dẫn [Cài đặt](https://github.com/huggingface/skills#installation) để biết thêm các nền tảng được hỗ trợ khác như Cursor và Gemini.

Sau khi cài đặt một kỹ năng, hãy bao gồm nó trong các chỉ dẫn của bạn dành cho tác nhân lập trình.

```md
Use the HF Trainer skill to fine-tune RT-DETRv2 on [Lekim89/sportsmot](https://huggingface.co/datasets/Lekim89/sportsmot) for basketball player tracking.
```

## Mô hình được huấn luyện trước

Mỗi mô hình được huấn luyện trước kế thừa từ ba lớp cơ sở.

| **Lớp** | **Mô tả** |
|---|---|
| [PreTrainedConfig](/docs/transformers/main/vi/main_classes/configuration#transformers.PreTrainedConfig) | Một tệp chỉ định các thuộc tính của mô hình, chẳng hạn như số đầu chú ý hoặc kích thước từ vựng. |
| [PreTrainedModel](/docs/transformers/main/vi/main_classes/model#transformers.PreTrainedModel) | Một mô hình (hoặc kiến trúc) được định nghĩa bởi các thuộc tính mô hình từ tệp cấu hình. Một mô hình được huấn luyện trước chỉ trả về các trạng thái ẩn thô. Đối với một tác vụ cụ thể, hãy sử dụng đầu mô hình phù hợp để chuyển đổi các trạng thái ẩn thô thành kết quả có ý nghĩa (ví dụ: [LlamaModel](/docs/transformers/main/vi/model_doc/llama2#transformers.LlamaModel) so với [LlamaForCausalLM](/docs/transformers/main/vi/model_doc/llama2#transformers.LlamaForCausalLM)). |
| Bộ tiền xử lý | Một lớp để chuyển đổi các đầu vào thô (văn bản, hình ảnh, âm thanh, đa phương thức) thành các đầu vào số cho mô hình. Ví dụ, [PreTrainedTokenizer](/docs/transformers/main/vi/main_classes/tokenizer#transformers.PythonBackend) chuyển đổi văn bản thành tensor và [ImageProcessingMixin](/docs/transformers/main/vi/internal/image_processing_utils#transformers.ImageProcessingMixin) chuyển đổi pixel thành tensor. |

Chúng tôi khuyến nghị sử dụng API [AutoClass](./model_doc/auto) để tải các mô hình và bộ tiền xử lý vì nó tự động suy luận kiến trúc phù hợp cho từng tác vụ và framework machine learning dựa trên tên hoặc đường dẫn đến trọng số được huấn luyện trước và tệp cấu hình.

Sử dụng [from_pretrained()](/docs/transformers/main/vi/main_classes/model#transformers.PreTrainedModel.from_pretrained) để tải trọng số và tệp cấu hình từ Hub vào lớp mô hình và bộ tiền xử lý.

Khi bạn tải một mô hình, hãy cấu hình các tham số sau để đảm bảo mô hình được tải một cách tối ưu.

- `device_map="auto"` tự động phân bổ trọng số mô hình vào thiết bị nhanh nhất của bạn trước tiên.
- `dtype="auto"` khởi tạo trực tiếp trọng số mô hình bằng kiểu dữ liệu mà chúng được lưu trữ, giúp tránh việc nạp trọng số hai lần (PyTorch mặc định nạp trọng số ở `torch.float32`).

```py
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf", dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
```

Tokenize văn bản và trả về các tensor PyTorch bằng tokenizer. Di chuyển các đầu vào đã được tokenize sang cùng thiết bị với mô hình trước khi chạy suy luận để mô hình có thể xử lý chúng.

```py
model_inputs = tokenizer(["The secret to baking a good cake is "], return_tensors="pt").to(model.device)
```

Mô hình giờ đã sẵn sàng để suy luận hoặc huấn luyện.

Để suy luận, truyền các đầu vào đã token hóa vào [generate()](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationMixin.generate) để tạo văn bản. Giải mã các id token thành văn bản bằng [batch_decode()](/docs/transformers/main/vi/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.batch_decode).

```py
generated_ids = model.generate(**model_inputs, max_length=30)
tokenizer.batch_decode(generated_ids)[0]
'<s> The secret to baking a good cake is 100% in the preparation. There are so many recipes out there,'
```

> [!TIP]
> Bỏ qua và chuyển đến phần [Trainer](#trainer) để tìm hiểu cách tinh chỉnh một mô hình.

## Pipeline

Lớp [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline) là cách thuận tiện nhất để chạy suy luận với một mô hình được huấn luyện trước. Nó hỗ trợ nhiều tác vụ như tạo văn bản, phân đoạn hình ảnh, nhận dạng giọng nói tự động, trả lời câu hỏi từ tài liệu, và nhiều hơn nữa.

> [!TIP]
> Tham khảo tài liệu tham khảo API [Pipeline](./main_classes/pipelines) để có danh sách đầy đủ các tác vụ khả dụng.

Tạo một đối tượng [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline) và chọn một tác vụ. Mặc định, [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline) sẽ tải xuống và lưu vào bộ nhớ đệm một mô hình được huấn luyện trước mặc định cho tác vụ đã cho. Truyền tên mô hình vào tham số `model` để chọn một mô hình cụ thể.

Sử dụng `Accelerator` để tự động phát hiện bộ tăng tốc khả dụng cho suy luận.

```py
from transformers import pipeline
from accelerate import Accelerator

device = Accelerator().device

pipe = pipeline("text-generation", model="meta-llama/Llama-2-7b-hf", device=device)
```

Gợi ý [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline) với một số văn bản ban đầu để tạo thêm văn bản.

```py
pipe("The secret to baking a good cake is ", max_length=50)
[{'generated_text': 'The secret to baking a good cake is 100% in the batter. The secret to a great cake is the icing.\nThis is why we’ve created the best buttercream frosting reci'}]
```

Sử dụng `Accelerator` để tự động phát hiện bộ tăng tốc khả dụng cho suy luận.

```py
from transformers import pipeline
from accelerate import Accelerator

device = Accelerator().device

pipeline = pipeline("image-segmentation", model="facebook/detr-resnet-50-panoptic", device=device)
```

Truyền một hình ảnh - một URL hoặc đường dẫn cục bộ đến hình ảnh - vào [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline).

   

```py
segments = pipeline("https://huggingface.co/datasets/Narsil/image_dummy/raw/main/parrots.png")
segments[0]["label"]
'bird'
segments[1]["label"]
'bird'
```

Sử dụng `Accelerator` để tự động phát hiện bộ tăng tốc khả dụng cho suy luận.

```py
from transformers import pipeline
from accelerate import Accelerator

device = Accelerator().device

pipeline = pipeline("automatic-speech-recognition", model="openai/whisper-large-v3", device=device)
```

Truyền một tệp âm thanh vào [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline).

```py
pipeline("https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac")
{'text': ' He hoped there would be stew for dinner, turnips and carrots and bruised potatoes and fat mutton pieces to be ladled out in thick, peppered flour-fatten sauce.'}
```

## Trainer

[Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) là vòng lặp huấn luyện và đánh giá hoàn chỉnh cho các mô hình PyTorch. Nó trừu tượng hóa phần lớn các đoạn mã lặp lại thường gặp khi tự viết vòng lặp huấn luyện, giúp bạn bắt đầu huấn luyện nhanh hơn và tập trung vào các lựa chọn thiết kế huấn luyện. Bạn chỉ cần một mô hình, tập dữ liệu, một bộ tiền xử lý và một bộ sắp xếp dữ liệu để tạo các lô dữ liệu từ tập dữ liệu.

Sử dụng lớp [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) để tùy chỉnh quy trình huấn luyện. Lớp này cung cấp nhiều tùy chọn cho huấn luyện, đánh giá và nhiều hơn nữa. Hãy thử nghiệm các siêu tham số và tính năng huấn luyện như batch size, learning rate, mixed precision, torch.compile và nhiều hơn nữa để đáp ứng nhu cầu huấn luyện của bạn. Bạn cũng có thể sử dụng các tham số huấn luyện mặc định để nhanh chóng tạo ra một baseline.

Tải mô hình, tokenizer và bộ dữ liệu để huấn luyện.

```py
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from datasets import load_dataset

model = AutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")
dataset = load_dataset("cornell-movie-review-data/rotten_tomatoes")
```

Tạo một hàm để tokenize văn bản và chuyển đổi nó thành các tensor PyTorch. Áp dụng hàm này lên toàn bộ dataset bằng phương thức [map](https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.map).

```py
def tokenize_dataset(dataset):
    return tokenizer(dataset["text"])
dataset = dataset.map(tokenize_dataset, batched=True)
```

Tải một data collator để tạo các lô dữ liệu và truyền tokenizer vào đó.

```py
from transformers import DataCollatorWithPadding

data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
```

Tiếp theo, thiết lập [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) với các tính năng huấn luyện và siêu tham số.

```py
from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="distilbert-rotten-tomatoes",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    num_train_epochs=2,
    push_to_hub=True,
)
```

Cuối cùng, truyền tất cả các thành phần riêng biệt này vào [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) và gọi [train()](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer.train) để bắt đầu.

```py
from transformers import Trainer

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    processing_class=tokenizer,
    data_collator=data_collator,
)

trainer.train()
```

Chia sẻ model và tokenizer của bạn lên Hub bằng [push_to_hub()](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer.push_to_hub).

```py
trainer.push_to_hub()
```

Chúc mừng, bạn vừa huấn luyện mô hình đầu tiên của mình với Transformers!

## Các bước tiếp theo

Giờ đây, khi bạn đã hiểu rõ hơn về Transformers và những gì nó mang lại, đã đến lúc tiếp tục khám phá và học hỏi những gì bạn quan tâm nhất.

- **Các lớp cơ sở**: Tìm hiểu thêm về các lớp cấu hình, mô hình và bộ xử lý. Điều này sẽ giúp bạn hiểu cách tạo và tùy chỉnh mô hình, tiền xử lý các loại đầu vào khác nhau (âm thanh, hình ảnh, đa phương thức), và cách chia sẻ mô hình của bạn.
- **Suy luận**: Khám phá sâu hơn về [Pipeline](/docs/transformers/main/vi/main_classes/pipelines#transformers.Pipeline), suy luận và trò chuyện với LLM, các tác tử, và cách tối ưu hóa suy luận bằng framework học máy và phần cứng của bạn.
- **Đào tạo**: Tìm hiểu chi tiết hơn về [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer), cũng như đào tạo phân tán và tối ưu hóa đào tạo trên phần cứng cụ thể.
- **Quantization**: Giảm yêu cầu về bộ nhớ và lưu trữ bằng quantization và tăng tốc suy luận bằng cách biểu diễn trọng số với ít bit hơn.
- **Tài nguyên**: Bạn đang tìm kiếm các công thức từ đầu đến cuối về cách huấn luyện và suy luận với một mô hình cho một tác vụ cụ thể? Hãy xem các công thức tác vụ!

