Hướng dẫn mô hình và phương thức10 tháng 11, 2026Flatkey Team

Machine learning với Python: mô hình đầu tiên và khi nào dùng GPU

Hướng dẫn thực hành trên CPU với scikit-learn, đánh giá lỗi và đưa ra quyết định hạ tầng dựa trên công việc thực tế, không cần GPU để bắt đầu.

Machine learning với Python: mô hình đầu tiên và khi nào dùng GPU

Để bắt đầu với machine learning với Python, hãy chọn một tác vụ nhỏ, tách dữ liệu huấn luyện và kiểm tra, rồi so sánh một mô hình đơn giản với một mốc tham chiếu cơ bản. Bạn không cần thuê GPU cho bài thực hành đầu tiên. Trong hướng dẫn này, chúng ta sẽ xây dựng một bộ phân loại hoàn chỉnh trên CPU, diễn giải các lỗi của nó và quyết định khi nào việc thay đổi hạ tầng là hợp lý.

Mục tiêu là hoàn thành một thử nghiệm mà bạn có thể lặp lại và giải thích. Dự đoán đúng một trường hợp riêng lẻ ít hữu ích hơn việc biết mô hình đã thấy những dữ liệu nào, được đánh giá ra sao và thất bại ở đâu.

Nên học gì trước trong machine learning với Python

Một dự án học có giám sát có các đầu vào, được gọi là đặc trưng, và một câu trả lời đã biết, được gọi là mục tiêu. Trong ví dụ của bài viết này, các đặc trưng là các phép đo hoa và mục tiêu là loài. Mô hình học một mối quan hệ bằng tập huấn luyện, sau đó cố gắng phân loại các ví dụ đã được tách riêng.

Trước khi chọn một thư viện, hãy viết ra câu hỏi bạn muốn trả lời:

Tác vụ Loại đầu ra Thử nghiệm đầu tiên có thể thực hiện
Phân loại một quan sát Một danh mục Hồi quy logistic hoặc cây quyết định
Ước lượng một đại lượng Một số Hồi quy tuyến tính và phân tích lỗi
Tìm các nhóm không có nhãn Các cụm Một phương pháp clustering và kiểm tra các nhóm
Làm việc với hình ảnh hoặc ngôn ngữ ở quy mô lớn Các biểu diễn và dự đoán phức tạp hơn Một thư viện deep learning phù hợp, sau khi xác định cách đánh giá

Đừng chọn mạng nơ-ron chỉ vì nó có vẻ tiên tiến hơn. Nếu một giải pháp đơn giản giải quyết được tác vụ trong chi phí và thời hạn cần thiết, nó là một mốc tham chiếu quan trọng cho mọi phương án thay thế về sau.

Chuẩn bị một môi trường tách biệt

Bạn cần một bản cài đặt Python tương thích với scikit-learn và quyền truy cập vào terminal. Hãy tạo một thư mục làm việc và một môi trường ảo để tránh xung đột với các dự án khác:

python -m venv .venv

Trên macOS hoặc Linux, kích hoạt bằng source .venv/bin/activate. Trong PowerShell trên Windows, dùng .venv\Scripts\Activate.ps1, tùy theo các chính sách terminal cục bộ. Sau đó, cài đặt thư viện và ghi lại các phiên bản:

python -m pip install scikit-learn
python -m pip freeze > requirements.txt

Dùng python3 thay cho python nếu đó là tên tệp thực thi trên máy tính của bạn. Tệp phụ thuộc giúp tái tạo môi trường; cũng hãy lưu phiên bản Python, mã nguồn và cấu hình thử nghiệm.

Một mô hình hoàn chỉnh đầu tiên: phân loại hoa

tập dữ liệu Iris của scikit-learn chứa 150 quan sát, bốn đặc trưng số và ba lớp. Tập này nhỏ và phù hợp để học quy trình làm việc, nhưng không chứng minh rằng một hệ thống đã sẵn sàng cho dữ liệu thực tế.

Lưu đoạn mã dưới đây dưới tên exemplo_iris.py và chạy python exemplo_iris.py. Mã sử dụng 120 quan sát để huấn luyện và 30 quan sát để kiểm tra. Phép chia phân tầng duy trì tỷ lệ đại diện của các lớp; seed cố định cho phép lặp lại cùng một phép chia.

import platform
from time import perf_counter
import sklearn
from sklearn.datasets import load_iris
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score, confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.20, random_state=42, stratify=y
)
models = {
    "baseline": DummyClassifier(strategy="most_frequent"),
    "logistica": make_pipeline(
        StandardScaler(), LogisticRegression(max_iter=1000)
    ),
}
for name, model in models.items():
    start = perf_counter()
    model.fit(X_train, y_train)
    train_seconds = perf_counter() - start
    pred = model.predict(X_test)
    print(name, "acuracia=", round(accuracy_score(y_test, pred), 3),
          "f1_macro=", round(f1_score(
              y_test, pred, average="macro", zero_division=0
          ), 3))
    print("matriz de confusao:", confusion_matrix(y_test, pred).tolist())
    print("tempo de treino (s):", round(train_seconds, 6))
print("Python:", platform.python_version(),
      "scikit-learn:", sklearn.__version__)

DummyClassifier cung cấp một phép so sánh không học mối quan hệ giữa các đặc trưng và lớp. Với chiến lược được dùng ở đây, nó dự đoán lớp xuất hiện nhiều nhất trong tập huấn luyện. Nếu một mô hình phức tạp hơn không cải thiện được một mốc tham chiếu như vậy, hãy xem xét dữ liệu, mục tiêu và cách đánh giá trước khi chi thêm tài nguyên. Xem các chiến lược trong tài liệu về DummyClassifier.

Hồi quy logistic nhận dữ liệu thông qua một Pipeline: trước tiên là chuẩn hóa, sau đó là bộ phân loại. Các phép biến đổi được khớp trên tập huấn luyện và áp dụng lại cho tập kiểm tra. Điều này tránh tính toán thang đo bằng thông tin lẽ ra phải được dành riêng cho việc đánh giá, một dạng rò rỉ dữ liệu phổ biến. Tài liệu về các thực hành tốt của scikit-learn giải thích lưu ý này.

Cách diễn giải đầu ra mà không tự đánh lừa mình

Khi chạy ví dụ này trên CPU, với Python 3.14.4 và scikit-learn 1.9.1, chúng tôi thu được các kết quả dưới đây. Đây là kết quả của bài thực hành và cách chia dữ liệu này, không phải là một cam kết cho tập dữ liệu khác.

Mô hình Độ chính xác trên tập kiểm tra F1 macro
Mốc tham chiếu theo lớp xuất hiện nhiều nhất 0,333 0,167
Chuẩn hóa + hồi quy logistic 0,933 0,933

Ma trận của mô hình thứ hai là [[10, 0, 0], [0, 9, 1], [0, 1, 9]]: hai trong số 30 bông hoa ở tập kiểm tra đã bị nhầm lẫn giữa hai lớp cuối. Điều này giàu thông tin hơn việc chỉ nói rằng mô hình dự đoán đúng khoảng 93%.

Độ chính xác cho biết tỷ lệ dự đoán đúng trên tập được đánh giá. F1 macro tính F1 cho từng lớp rồi lấy trung bình mà không gán trọng số lớn hơn cho lớp xuất hiện nhiều nhất. Ma trận nhầm lẫn cho biết những lớp nào bị nhầm với nhau. Hãy dùng cả ba cách đọc để hiểu hành vi, thay vì chỉ tìm con số lớn nhất.

Thời gian được in ra chỉ là thời gian huấn luyện của lần chạy đó trên máy tính của bạn. Với một tập nhỏ như vậy, thời gian này thay đổi theo máy và theo nhiễu đo lường. Đừng dùng con số này để cam kết tiết kiệm trên đám mây hoặc so sánh CPU với GPU.

Kết quả trên Iris cũng không nên trở thành kỳ vọng về độ chính xác cho sản phẩm của bạn. Với dữ liệu riêng, phân phối, chất lượng nhãn và chi phí của các lỗi có thể hoàn toàn khác. Một lỗi hiếm gặp có thể quan trọng hơn hàng chục dự đoán đúng dễ dàng.

Trước khi thay đổi thuật toán, hãy trả lời:

  1. Mô hình có vượt mốc tham chiếu cơ bản khi dùng chính xác cùng một tập kiểm tra không?
  2. Lớp nào tập trung các lỗi và tác động của chúng đối với tác vụ là gì?
  3. Có thông tin nào trong đầu vào chỉ có sẵn sau khi dự đoán không?
  4. Tập kiểm tra có đại diện cho các ví dụ mới hay chứa bản sao và các quan sát liên quan đến tập huấn luyện?
  5. Hiệu năng có duy trì ở các cách chia dữ liệu hợp lệ khác không?

Từ bài thực hành đến tập dữ liệu thực tế

Chia ngẫu nhiên thuận tiện cho Iris. Cách này có thể không phù hợp nếu bạn dự đoán các sự kiện trong tương lai, có nhiều dòng cho mỗi khách hàng hoặc gặp các bản sao của cùng một quan sát. Trong những trường hợp này, hãy cân nhắc tách theo thời gian hoặc theo nhóm, tùy theo cách mô hình sẽ được sử dụng. Tham số random_state không sửa được một cách chia sai về mặt khái niệm. Tài liệu tham khảo về train_test_split mô tả các cơ chế kiểm soát có sẵn cho cách chia đơn giản này.

Dành tập xác thực để chọn cấu hình và giữ riêng một tập kiểm tra cuối cùng. Nếu bạn xem tập kiểm tra nhiều lần để quyết định điều chỉnh tiếp theo, nó sẽ bắt đầu ảnh hưởng đến lựa chọn của bạn. Đối với một dự án nhỏ, một bảng tính thí nghiệm đã có thể hữu ích:

Bản ghi Nội dung cần ghi chú
Dữ liệu Nguồn, ngày, kích thước, cột và quy tắc loại trừ
Chia dữ liệu Theo thời gian, theo nhóm hoặc ngẫu nhiên; seed khi áp dụng được
Mô hình Thuật toán, tham số và phiên bản các phụ thuộc
Đánh giá Chỉ số chính, lỗi theo lớp và so sánh với mốc tham chiếu
Vận hành Thời gian, bộ nhớ, kích thước tạo phẩm và chi phí đã đo
Quyết định Điều gì đã cải thiện và vấn đề nào vẫn còn bỏ ngỏ

Khi thay Iris bằng một bảng dữ liệu riêng, hãy xác thực kiểu dữ liệu, trường bị thiếu và các danh mục trước khi huấn luyện. Giữ các phép biến đổi cùng với mô hình để dự đoán sử dụng cùng cách chuẩn bị dữ liệu. Một cột thay đổi đơn vị có thể gây vấn đề ngay cả khi mã vẫn tiếp tục chạy.

Khi nào GPU hữu ích — và khi nào không

Ví dụ trong hướng dẫn này chạy trên CPU. Việc thêm một card vào máy không tự động khiến toàn bộ mã scikit-learn sử dụng nó. Dự án có tài liệu về hỗ trợ GPU cho một tập hợp giới hạn các estimator và cấu hình, bao gồm cả thông qua các đầu vào và tùy chọn cụ thể. Hãy kiểm tra lộ trình chính xác của thuật toán đã chọn.

GPU đáng để thử nghiệm khi có một cách triển khai tương thích và một khối lượng công việc có thể tận dụng nó, chẳng hạn một số quá trình huấn luyện mạng nơ-ron hoặc xử lý theo lô. Dù vậy, lợi ích vẫn cần bù đắp được chi phí truyền dữ liệu, chuẩn bị môi trường và hạ tầng.

Tình huống quan sát được Hành động tiếp theo được khuyến nghị
Ít dữ liệu và huấn luyện nhanh trên CPU Ưu tiên chất lượng dữ liệu và đánh giá
Đọc hoặc chuẩn bị dữ liệu chiếm phần lớn thời gian Đo lường việc lưu trữ, tải dữ liệu và các phép biến đổi
Thuật toán không có lộ trình tương thích với GPU Xem xét lại thư viện hoặc tiếp tục dùng CPU
Quá trình huấn luyện tương thích GPU chiếm phần lớn chu trình Thực hiện một thử nghiệm có kiểm soát trên cấu hình đang cân nhắc
Mô hình lớn hoặc khối lượng suy luận cao Đo lường bộ nhớ, độ trễ và khả năng xử lý đồng thời với tải thực tế

Hãy so sánh tổng thời gian để đạt được một kết quả hữu ích, thay vì chỉ thời gian thực thi một thao tác. Bao gồm cài đặt, truyền dữ liệu, huấn luyện, xác thực, lưu trữ và thời gian nhàn rỗi. Một phương án nhanh hơn theo từng epoch có thể tệ hơn nếu cần nhiều lần thử hơn để đạt chất lượng cần thiết.

Khi dự án đến giai đoạn này, Flatkey Cloud GPU cho phép đánh giá các lựa chọn thuê GPU NVIDIA. Hãy xác nhận cấu hình, khu vực, khả dụng và điều kiện cho tải dự kiến. Chuẩn bị quy mô tập dữ liệu, thư viện, bộ nhớ cần thiết và mục tiêu thử nghiệm; hướng dẫn này không yêu cầu thuê GPU để hoàn thành.

Trước khi đưa mô hình vào sử dụng

Xác định định dạng đầu vào được chấp nhận, cách xử lý các trường không hợp lệ và cách theo dõi lỗi sau khi phát hành. Lưu phiên bản mô hình và quy trình chuẩn bị dữ liệu cùng nhau. Hãy kiểm tra một dự đoán với dữ liệu đại diện bên ngoài notebook trước khi nghĩ đến việc mở rộng quy mô.

Nếu bước tiếp theo là phục vụ một mô hình ngôn ngữ bằng hạ tầng riêng, hướng dẫn triển khai vLLM đề cập đến một loại tải khác. Đừng nhầm lẫn một bộ phân loại dạng bảng nhỏ với việc vận hành một LLM: yêu cầu về bộ nhớ, đánh giá và máy chủ là khác nhau.

Câu hỏi thường gặp

Tôi có cần GPU để học machine learning với Python không?

Không. Ví dụ được trình bày có thể chạy trên CPU. Chỉ chọn hạ tầng lớn hơn khi có nút thắt cổ chai đã được đo lường và một cách triển khai có thể tận dụng nó.

Tại sao nên dùng một mốc tham chiếu cơ bản trước một mô hình phức tạp hơn?

Nó cho thấy có thể đạt được gì với một quy tắc đơn giản. Điều này cho phép đánh giá liệu mô hình có học được điều hữu ích hay không và liệu độ phức tạp bổ sung có hợp lý hay không.

Cùng một seed có đảm bảo cùng kết quả trong mọi môi trường không?

Nó cố định các lựa chọn ngẫu nhiên được kiểm soát bởi tham số đó. Hãy cũng ghi lại các phiên bản và môi trường; khác biệt về cách triển khai và thực thi có thể ảnh hưởng đến kết quả. Đừng nhầm tính lặp lại của một lần chia dữ liệu với sự đảm bảo hiệu năng phổ quát.

Dự án tiếp theo sau Iris là gì?

Hãy chọn một tác vụ nhỏ với dữ liệu bạn hiểu, một mục tiêu có thể kiểm chứng và một tiêu chí thành công. Lặp lại quy trình: mốc tham chiếu, chia dữ liệu đúng cách, mô hình, phân tích lỗi và đo lường. Thói quen này là nền tảng để phát triển trong machine learning với Python mà không tăng chi phí trước khi cần thiết.