Cài đặt WebUI cho Qwen3-ASR-0.6B trên Ubuntu 22.04 với NVIDIA Drivers

Chuẩn bị Môi Trường và Yêu Cầu Hệ Thống

Trước khi cài đặt dịch vụ nhận diện giọng nói Qwen3-ASR-0.6B, cần đảm bảo hệ thống đáp ứng các yêu cầu cơ bản.

  • Hệ điều hành: Ubuntu 22.04 LTS
  • NVIDIA GPU (tối thiểu 8GB VRAM)
  • Bộ nhớ hệ thống: 16GB
  • Dung lượng ổ cứng: 50GB
  • Kết nối mạng ổn định
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-pip python3-venv git wget curl nvidia-cuda-toolkit

Cài Đặt NVIDIA Driver

Đảm bảo driver NVIDIA được cài đặt đúng cách để sử dụng tính năng tăng tốc GPU.

lspci | grep -i nvidia
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
sudo ubuntu-drivers autoinstall
sudo reboot
nvidia-smi

Cấu Hình CUDA và cuDNN

Qwen3-ASR-0.6B yêu cầu cấu hình môi trường CUDA chính xác.

wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
sudo sh cuda_12.2.2_535.104.05_linux.run
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
nvcc --version

Cài Đặt Dịch Vụ Qwen3-ASR-0.6B

Tạo thư mục dự án và thiết lập môi trường Python.

mkdir -p ~/qwen_service
cd ~/qwen_service
python3 -m venv env
source env/bin/activate

cat > requirements.txt << EOF
torch==2.1.0
torchaudio==2.1.0
fastapi==0.104.1
uvicorn==0.24.0
pydantic==2.5.0
aiofiles==23.2.1
python-multipart==0.0.6
requests==2.31.0
numpy==1.24.3
librosa==0.10.1
soundfile==0.12.1
EOF

pip install -r requirements.txt

Cấu Hình FastAPI và WebUI

Tạo ứng dụng FastAPI và giao diện WebUI.

mkdir -p app webui logs
# Tạo app/main.py
from fastapi import FastAPI, File, UploadFile, HTTPException
from fastapi.middleware.cors import CORSMiddleware
import torch
import torchaudio
from pathlib import Path
import tempfile
import logging
from typing import Optional

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('logs/app.log'),
        logging.StreamHandler()
    ]
)

app = FastAPI(title="Qwen3-ASR-0.6B Nhận Diện Giọng Nói")

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/api/health")
async def health_check():
    return {
        "status": "healthy",
        "model_loaded": True,
        "gpu_available": torch.cuda.is_available(),
        "gpu_memory": {
            "allocated": round(torch.cuda.memory_allocated() / 1024**3, 2),
            "cached": round(torch.cuda.memory_reserved() / 1024**3, 2)
        }
    }

@app.post("/api/transcribe")
async def transcribe_audio(audio_file: UploadFile = File(...), language: Optional[str] = None):
    try:
        return {
            "text": "Nội dung văn bản đã nhận diện",
            "language": language or "auto",
            "status": "success"
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.post("/api/transcribe_url")
async def transcribe_from_url(audio_url: str, language: Optional[str] = None):
    try:
        return {
            "text": "Nội dung văn bản từ URL",
            "language": language or "auto",
            "status": "success"
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

# Tạo webui/server.py
import http.server
import socketserver
import threading

class UiHandler(http.server.SimpleHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, directory='webui', **kwargs)

def start_ui_server():
    PORT = 9090
    with socketserver.TCPServer(("", PORT), UiHandler) as httpd:
        print(f"WebUI server started on port {PORT}")
        httpd.serve_forever()

if __name__ == "__main__":
    start_ui_server()

Quản Lý Dịch Vụ với Supervisor

Cài đặt và cấu hình Supervisor để quản lý dịch vụ.

sudo apt install -y supervisor
sudo tee /etc/supervisor/conf.d/qwen_service.conf << EOF
[program:qwen_service]
command=/root/qwen_service/env/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
directory=/root/qwen_service
autostart=true
autorestart=true
stderr_logfile=/root/qwen_service/logs/stderr.log
stdout_logfile=/root/qwen_service/logs/stdout.log
environment=PYTHONPATH="/root/qwen_service"
EOF

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start qwen_service

Thử nghiệm và Xác minh Dịch Vụ

Kiểm tra trạng thái và thử nghiệm chức năng của dịch vụ.

sudo supervisorctl status qwen_service
curl http://localhost:8000/api/health

Cấu Hình Firewall và Truy Cập Từ Bên Ngoài

Cấu hình firewall để cho phép truy cập vào dịch vụ.

sudo ufw allow 9090/tcp
sudo ufw allow 8000/tcp
sudo ufw reload

Thẻ: Ubuntu NVIDIA CUDA FastAPI Supervisor

Đăng vào ngày 17 tháng 05 lúc 14:00