0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Hướng Dẫn Triển Khai Mô Hình Học Máy Với AWS SageMaker: Từng Bước Cụ Thể

Đăng vào 1 tuần trước

• 5 phút đọc

Mở Đầu

Trong những năm gần đây, trí tuệ nhân tạo (Artificial Intelligence), học máy (Machine Learning), và đặc biệt là học sâu (Deep Learning) đã có sự phát triển vượt bậc, trở thành ngành công nghệ mũi nhọn. Ngày càng nhiều cá nhân, tổ chức và doanh nghiệp muốn khai thác tiềm năng của AI để tạo ra giá trị và lợi nhuận thông qua các mô hình học máy. Tuy nhiên, việc triển khai mô hình học máy cho người mới bắt đầu có thể gặp khó khăn.

Bài viết này sẽ giới thiệu chi tiết các bước cụ thể để triển khai mô hình học máy thông qua Docker, FastAPI, và AWS SageMaker, giúp người dùng có thể thao tác dễ dàng hơn.

Tổng Quan Các Bước Triển Khai Mô Hình Học Máy

Quá trình triển khai mô hình bao gồm các bước chính như sau:

  1. Huấn luyện (Train) mô hình để tạo ra model artifacts.
  2. Lưu model artifacts vào một S3 bucket.
  3. Đóng gói (dockerize) mã nguồn xử lý inference để tạo ra Docker image.
  4. Đưa Docker image lên Amazon Elastic Container Registry (ECR).
  5. Tạo một SageMaker model, sử dụng model artifacts và Docker image đã có.
  6. Tạo một SageMaker endpoint configuration để xác định SageMaker model và tài nguyên cần thiết.
  7. Tạo một SageMaker asynchronous endpoint.
  8. Sử dụng thư viện Boto3 để gọi (invoke) đến endpoint.
  9. Tự động điều chỉnh tài nguyên (Auto-scale) cho SageMaker endpoint.

Bước 1: Huấn Luyện Mô Hình

Để bắt đầu, bạn cần huấn luyện mô hình và đảm bảo rằng bạn có được các file cần thiết cho việc triển khai. Bài viết này sẽ sử dụng mô hình tóm tắt văn bản (text summarization) từ thư viện transformers. Thực hiện việc tải xuống artifact theo đoạn mã sau:

python Copy
from huggingface_hub import snapshot_download

snapshot_download(
    repo_id="facebook/bart-large-cnn",
    local_dir="model",
    local_dir_use_symlinks=False,
    ignore_patterns=["*.bin", "*.h5", "*.msgpack", "*.ot"]
)

Sau khi tải về, bạn cần nén lại thành file định dạng .tar.gz:

bash Copy
tar -czvf model.tar.gz model

Bước 2: Lưu Model Artifacts Lên S3

Tiếp theo, bạn cần lưu model artifacts vừa tạo vào S3. Hãy đảm bảo rằng bạn đã chuẩn bị đầy đủ quyền truy cập và xác thực cho tài khoản AWS của mình.

Bước 3: Đóng Gói Docker Với Mã Nguồn Inference

Mã nguồn inference cần được tạo dưới dạng một API sẽ lắng nghe tại cổng 8080. Các yêu cầu tối thiểu cần có là một phương thức GET cho /ping và một phương thức POST cho /invocations:

python Copy
# app/main.py
import os
from fastapi import FastAPI, Request
from transformers import pipeline

app = FastAPI()

summarizer = pipeline(
    "summarization",
    model=os.environ.get("MODEL_NAME"),
    device="cuda"
)

@app.get("/ping")
async def ping():
    return {"message": "ok"}

@app.post("/invocations")
async def invocations(request: Request):
    data = await request.json()
    paragraph = data.get("text")
    max_length = data.get("max_length", 50)
    min_length = data.get("min_length", 25)
    summary = summarizer(
        paragraph,
        max_length=max_length,
        min_length=min_length,
        do_sample=False
    )
    return {"summary": summary[0]["summary_text"]}

Bước 4: Đưa Docker Image Lên ECR

Tạo một repository mới trên Amazon ECR và xác thực SSH trước khi thực hiện việc đẩy Docker image:

bash Copy
docker build -t <repository_name> .
docker tag <repository_name>:latest <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:latest
docker push <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:latest

Bước 5: Tạo SageMaker Model

Sử dụng Boto3 để tạo SageMaker model. Bạn cần thiết lập đầy đủ quyền truy cập tài nguyên AWS:

python Copy
import boto3
from sagemaker import Session

sagemaker_session = Session(boto_session=boto3.Session())
role = "your-execution-role"
model_data = "s3://your-bucket/model.tar.gz"
container = f"<aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:latest"

create_model_response = sagemaker_client.create_model(
    ModelName="your_model_name",
    ExecutionRoleArn=role,
    Containers=[{
                'Image': container,
                'ModelDataSource': {
                    'S3DataSource': {
                        'S3Uri': model_data,
                        'S3DataType': 'S3Object',
                        'CompressionType': 'Gzip',
                    }
                },
                'Environment': {
                    'MODEL_DIR': '/opt/ml/model/model',
                }
            }]
)

Bước 6: Tạo SageMaker Endpoint Configuration

Tạo một endpoint configuration với thông tin về loại instance, số lượng và model:

python Copy
create_endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName="your_config_name",
    ProductionVariants=[{
        'InstanceType': 'ml.g4dn.xlarge',
        'InitialInstanceCount': 1,
        'ModelName': model_name,
        'VariantName': 'AllTraffic'
    }]
)

Bước 7: Tạo SageMaker Asynchronous Endpoint

Tạo endpoint với tên duy nhất và theo dõi trạng thái:

python Copy
create_endpoint_response = sagemaker_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name
)

Bước 8: Invoke Endpoint Bằng Boto3

Gọi endpoint đã tạo sử dụng thư viện Boto3:

python Copy
response = runtime_sagemaker_client.invoke_endpoint_async(...)

Bước 9: Tự Động Điều Chỉnh Tài Nguyên (Auto-scaling)

Để giảm chi phí, bạn có thể cấu hình auto-scaling cho endpoints bằng cách sử dụng CloudWatch:

python Copy
autoscaling_client.register_scalable_target(...)

Kết Luận

Bài viết đã hướng dẫn từng bước chi tiết để triển khai mô hình học máy sử dụng AWS SageMaker. Việc này không chỉ giúp đưa mô hình gần với người dùng mà còn tiết kiệm chi phí và quản lý tài nguyên một cách hiệu quả. SageMaker là công cụ hỗ trợ đắc lực cho các doanh nghiệp trong việc phát triển và triển khai AI.

Tài Liệu Tham Khảo

Các tài liệu và hướng dẫn chi tiết từ AWS có thể tham khảo thêm tại AWS SageMaker Documentation.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào