1.1. Hướng dẫn Cài đặt Môi trường AI/ML trên AlmaLinux Toàn tập#

Tài liệu này cung cấp một hướng dẫn toàn diện để thiết lập một server AlmaLinux cho các tác vụ huấn luyện và triển khai mô hình AI/ML, bao gồm cả các công cụ quản lý code, container hóa và hỗ trợ GPU.

1.1.1. Bước 1: Cấu hình Hệ thống và Truy cập#

Các bước ban đầu này giúp bạn thiết lập quyền truy cập và bảo mật cơ bản cho server.

  1. Cấu hình VS Code Remote SSH Việc này cho phép bạn làm việc trực tiếp trên server từ VS Code ở máy tính cá nhân.

    • Cài đặt Extension: Trên VS Code, cài đặt extension “Remote - SSH”.

    • Cấu hình Remote: Nhấn F1 hoặc Ctrl+Shift+P, gõ “Remote-SSH: Connect to Host…” và chọn “Add New SSH Host…”. Nhập ssh <user>@<server-ip> (ví dụ: ssh mbsapp1@10.19.105.85).

    • Chỉnh sửa file cấu hình:

      Host my-aiml-server
          HostName 10.19.105.85
          User mbsapp1
      
    • Kết nối: Chọn “Connect to Host…” và chọn my-aiml-server.

  2. Cài đặt VS Code Extensions trên Server: Cài đặt từ file .vsix (Khi máy client không có mạng) Nếu máy client của bạn không có kết nối internet, bạn có thể cài đặt thủ công bằng cách sao chép file .vsix từ máy client sang server.

      1. Lấy file .vsix: Trên một máy tính có mạng, truy cập VS Code Marketplace, tìm extension bạn cần và tải về file .vsix.

      2. Sao chép file lên server: Sử dụng các công cụ như SCP (Secure Copy Protocol) hoặc các trình quản lý file qua SSH để chuyển file .vsix từ máy client lên server.

      3. Cài đặt bằng dòng lệnh: Trên terminal của server, chạy lệnh sau để cài đặt extension:

        code --install-extension <đường_dẫn_đến_file.vsix>
        

      Ví dụ: code --install-extension ~/dbcode-1.2.3.vsix

  3. Cấu hình sudo không cần nhập mật khẩu (Chi tiết) Để không phải nhập lại mật khẩu sudo liên tục, bạn có thể cấp quyền đặc biệt cho người dùng.

    • Lưu ý Quan trọng: Thao tác này làm giảm đáng kể tính bảo mật của hệ thống. Chỉ nên thực hiện khi bạn là người duy nhất có quyền truy cập vào server và hiểu rõ rủi ro.

    • Sử dụng visudo: Bạn phải sử dụng lệnh sudo visudo để chỉnh sửa file cấu hình sudoers. Lệnh này sẽ mở file bằng một trình soạn thảo văn bản an toàn, giúp kiểm tra cú pháp trước khi lưu. Điều này ngăn ngừa các lỗi có thể khóa bạn khỏi quyền sudo.

      sudo visudo
      
    • Chỉnh sửa file: File sudoers sẽ được mở ra. Tìm đến cuối file và thêm dòng sau. Hãy chắc chắn thay <username> bằng tên user của bạn (ví dụ: mbsapp1).

      # Cho phép user chạy các lệnh sudo mà không cần nhập mật khẩu
      <username> ALL=(ALL) NOPASSWD: ALL
      
    • Lưu và thoát: Sau khi thêm dòng trên, bạn cần lưu file và thoát khỏi trình soạn thảo.

      • Nếu dùng vi/vim (mặc định): Nhấn Esc, sau đó gõ :wq và nhấn Enter.

  4. Đổi mật khẩu User Sử dụng lệnh passwd để đổi mật khẩu user.

    passwd <username>
    

1.1.2. Bước 2: Cài đặt Các Công cụ Phát triển Cơ bản#

Đây là các công cụ nền tảng cho mọi dự án phần mềm, bao gồm cả AI/ML.

  1. Cài đặt Git Git là công cụ quản lý phiên bản (version control) tiêu chuẩn, không thể thiếu để quản lý code.

    • Cài đặt Git:

      sudo dnf install git -y
      
    • Cấu hình thông tin người dùng:

      git config --global user.name "Tên của bạn"
      git config --global user.email "email@example.com"
      
    • Kết nối đến GitLab Để kết nối an toàn và tiện lợi với GitLab, bạn nên sử dụng khóa SSH.

      1. Cấu hình thông tin người dùng cho GitLab: Sử dụng email của bạn để đồng bộ với tài khoản GitLab.

        git config --global user.name "Dat Khong Tien"
        git config --global user.email "dat.khongtien@mbs.com.vn"
        
      2. Tạo khóa SSH: Sử dụng ssh-keygen để tạo một cặp khóa. Để trống các tùy chọn khi được hỏi để sử dụng giá trị mặc định.

        ssh-keygen -t ed25519 -C "dat.khongtien@mbs.com.vn"
        
      3. Thêm khóa công khai (public key) vào GitLab: Copy nội dung của file public key và dán vào phần cài đặt SSH Keys trên tài khoản GitLab của bạn.

        cat ~/.ssh/id_ed25519.pub
        

        Bạn có thể truy cập User Settings > SSH Keys trên GitLab để thêm khóa.

      4. Kết nối bằng HTTPS (sử dụng Personal Access Token) Đây là một phương pháp thay thế nếu bạn gặp vấn đề với xác thực SSH.

        a. Tạo Personal Access Token (PAT) trên GitLab: Truy cập User Settings > Access Tokens trên GitLab.

        • Token name: Đặt một tên dễ nhớ (ví dụ: server-access-token).

        • Scopes: Chọn quyền read_repositorywrite_repository.

        • Nhấn Create personal access token.

        • Sao chép chuỗi token được tạo ra.

        b. Sử dụng token để clone project: Khi clone, bạn có thể truyền token trực tiếp vào URL:

        git clone https://gitlab-ci-token:<your_personal_access_token>@gitlab.mbs.com.vn/data-platform/models/customer-risk-clustering.git
        
  2. Cài đặt Docker và Docker Compose Docker là công cụ container hóa, giúp đóng gói ứng dụng và môi trường vào container để đảm bảo tính nhất quán khi triển khai.

    • Gỡ bỏ các phiên bản Docker cũ (nếu có):

      sudo dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
      
    • Thiết lập kho lưu trữ Docker:

      sudo dnf -y install dnf-plugins-core
      sudo dnf config-manager --add-repo [https://download.docker.com/linux/centos/docker-ce.repo](https://download.docker.com/linux/centos/docker-ce.repo)
      
    • Cài đặt Docker Engine, CLI và các plugin:

      sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
      
    • Khởi động và kích hoạt Docker:

      sudo systemctl start docker
      sudo systemctl enable docker
      
    • Dừng Docker:

      sudo systemctl stop docker
      
    • Cấu hình user để chạy Docker không cần sudo (đăng xuất và đăng nhập lại để có hiệu lực):

      sudo usermod -aG docker mbsapp1
      
  3. Cài đặt Make Make là một công cụ tự động hóa các tác vụ thường xuyên và lặp lại.

    • Cài đặt Make:

      sudo dnf install make -y
      

1.1.3. Bước 3: Thiết lập Môi trường Python và Deep Learning#

Đây là bước quan trọng nhất để chuẩn bị cho các tác vụ huấn luyện và triển khai mô hình.

  1. Cài đặt Python với pyenv pyenv giúp quản lý nhiều phiên bản Python khác nhau trên cùng một hệ thống.

    • Cài đặt các gói phụ thuộc:

      sudo dnf install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel
      
    • Cài đặt pyenv: curl https://pyenv.run | bash

    • Thêm pyenv vào shell, sau đó source ~/.bashrc:

      export PATH="$HOME/.pyenv/bin:$PATH"
      eval "$(pyenv init --path)"
      eval "$(pyenv init -)"
      eval "$(pyenv virtualenv-init -)"
      
    • Cài đặt các phiên bản Python Để chuẩn bị cho các dự án trong tương lai, đặc biệt là khi server bị ngắt kết nối mạng, bạn nên cài đặt một số phiên bản Python ổn định khác.

      pyenv install 3.12.10
      # pyenv install 3.11.9
      # pyenv install 3.10.14
      # pyenv install 3.9.18
      
    • Thiết lập phiên bản mặc định Để sử dụng một phiên bản cụ thể cho dự án, bạn có thể thiết lập phiên bản Python mặc định bằng lệnh sau.

      pyenv global 3.12.10
      
  2. Cài đặt Trình điều khiển GPU, CUDA và cuDNN Đây là các thành phần cốt lõi để chạy các mô hình deep learning trên GPU.

    • Cài đặt Driver NVIDIA:

      sudo dnf install [https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm](https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm)
      sudo dnf install nvidia-driver nvidia-settings -y
      
    • Cài đặt CUDA Toolkit:

      sudo dnf config-manager --add-repo [https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo](https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo)
      sudo dnf clean all
      sudo dnf install cuda -y
      
    • Thêm CUDA vào PATH: Thêm dòng sau vào .bashrc của bạn:

      export PATH=/usr/local/cuda/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
      
    • Cài đặt cuDNN: Tải file cuDNN từ trang web của NVIDIA và cài đặt thủ công.

  3. Cài đặt Thư viện AI/ML ⚠️ LƯU Ý QUAN TRỌNG: Các thư viện dưới đây nên được cài đặt trong môi trường ảo của dự án, không phải môi trường global của hệ thống.

    Sử dụng pip hoặc uv để cài đặt các thư viện phổ biến.

    • TensorFlow:

      pip install tensorflow[and-cuda]
      
    • PyTorch:

      pip install torch torchvision torchaudio
      
    • Các thư viện khác: uv pip install numpy pandas scikit-learn matplotlib jupyter

  4. Cài đặt Các Công cụ Quản lý Thư viện Để đảm bảo các công cụ quản lý thư viện hoạt động hiệu quả, hãy cập nhật pip trước tiên.

    • Nâng cấp pip:

      pip install --upgrade pip
      
    • uv (siêu nhanh): pip install uv

    • poetry, poethepoet (mạnh mẽ): uv pip install poetry poethepoet --system

1.1.4. Bước 4: Quản lý Dự án và Môi trường#

  1. Cấu hình pyproject.toml và Poe the Poet Sử dụng pyproject.toml để quản lý dependencies cho cả môi trường training và serving. Thêm Poe the Poet (poe) để tự động hóa các tác vụ.

    • Cài đặt poe vào môi trường ảo của dự án:

      poetry add --group dev poethepoet
      
    • Training: Cần nhiều thư viện để huấn luyện.

    • Serving: Cần ít thư viện nhất để triển khai nhẹ nhàng.

    • Ví dụ pyproject.toml:

      [tool.poetry]
      name = "my-ml-project"
      version = "0.1.0"
      description = "Project for training and serving ML models."
      authors = ["Your Name <you@example.com>"]
      
      [tool.poetry.dependencies]
      python = "^3.12.10"
      fastapi = "^0.111.0"
      uvicorn = "^0.30.1"
      requests = "^2.3.2"
      psycopg2-binary = "^2.9.9"
      pyodbc = "^5.1.0"
      minio = "^7.2.2"
      redis = "^5.0.5"
      
      [tool.poetry.group.training.dependencies]
      numpy = "^1.26.4"
      pandas = "^2.2.2"
      scikit-learn = "^1.5.0"
      tensorflow = "^2.16.1"
      torch = "^2.3.1"
      matplotlib = "^3.9.0"
      jupyter = "^1.0.0"
      
      [tool.poe.tasks]
      train = "python -m my_project.train"
      serve = "uvicorn my_project.serve:app --reload"
      test = "pytest"
      
      
    • Cách sử dụng:

      • Cài đặt cho training: poetry install --with training

      • Cài đặt cho serving: poetry install

  2. Chuẩn bị Môi trường Offline Tải tất cả các gói cần thiết vào một thư mục để cài đặt khi server ngắt kết nối mạng.

    • Tải gói: uv pip download -r <requirements_file> -d offline_packages

    • Cài đặt offline: uv pip install --no-index --find-links=./offline_packages/ -r <requirements_file>

1.1.5. Bước 5: Các Công cụ Hữu ích cho Vận hành#

  1. Jupyter Notebook/Lab ⚠️ LƯU Ý QUAN TRỌNG: Tương tự các thư viện ở trên, Jupyter Notebook cũng nên được cài đặt trong môi trường ảo của dự án để tránh xung đột phiên bản và giữ môi trường hệ thống sạch sẽ.

    Một môi trường tương tác tuyệt vời cho việc khám phá dữ liệu và huấn luyện mô hình.

    • Cài đặt:

      • Nếu bạn đã lỡ cài đặt Jupyter vào môi trường global, hãy chạy lệnh sau để gỡ bỏ:

        pip uninstall jupyter notebook
        
      • Sau đó, hãy thêm jupyter vào file pyproject.toml và chạy poetry install --with training để cài đặt vào môi trường ảo.

    • Cách chạy: Để chạy trên server và truy cập từ xa, hãy chạy lệnh sau từ môi trường ảo:

      jupyter notebook --no-browser --port=8888 --ip=0.0.0.0 --allow-root
      
  2. Giám sát Hệ thống

    • htop: Giám sát tài nguyên CPU và RAM. Cài đặt: sudo dnf install htop -y

    • nvtop: Giám sát tài nguyên GPU (cần có driver NVIDIA). Cài đặt: sudo dnf install nvtop -y


1.1.6. Bước 6: Các Lệnh Linux Cốt lõi cho MLOps#

Để quản lý và triển khai các dự án MLOps một cách hiệu quả, việc nắm vững các lệnh Linux là điều cần thiết. Dưới đây là các lệnh được nhóm theo chức năng, giúp bạn dễ dàng làm việc trên server AlmaLinux.

1.1.6.1. 1. Quản lý File và Thư mục#

Lệnh

Chức năng

Ví dụ

ls -al

Liệt kê tất cả file và thư mục, bao gồm cả các file ẩn, với các thông tin chi tiết (quyền, kích thước, ngày sửa đổi).

ls -al /home/mbsapp1

pwd

In ra đường dẫn của thư mục làm việc hiện tại.

pwd

cd <path>

Thay đổi thư mục.

cd /data-platform/models/

mkdir -p <path>

Tạo một thư mục mới. Tùy chọn -p tạo cả các thư mục cha nếu chúng chưa tồn tại.

mkdir -p /data/raw_data/

rm -rf <path>

Xóa một file hoặc thư mục. Cẩn thận khi sử dụng vì lệnh này không thể hoàn tác.

rm -rf /data/temp_models

cp -r <source> <dest>

Sao chép file hoặc thư mục.

cp -r model.pkl /data/

mv <source> <dest>

Di chuyển hoặc đổi tên file/thư mục.

mv data.csv new_data.csv

du -sh <path>

Xem kích thước của một thư mục.

du -sh /data/processed_data

find <path> -name "<name>"

Tìm kiếm file hoặc thư mục trong một đường dẫn.

find . -name "*.log"

grep <text> <file>

Tìm kiếm một chuỗi văn bản trong file.

grep "ERROR" my_app.log

head <file>

Hiển thị 10 dòng đầu tiên của file.

head data.csv

tail <file>

Hiển thị 10 dòng cuối cùng của file. Rất hữu ích để xem log.

tail -f my_app.log

touch <file>

Tạo một file trống.

touch new_script.py

chmod <permissions> <file>

Thay đổi quyền truy cập của file hoặc thư mục.

chmod +x run.sh

1.1.6.2. 2. Quản lý Tiến trình (Processes)#

Lệnh

Chức năng

Ví dụ

ps aux

Liệt kê tất cả các tiến trình đang chạy trên hệ thống.

ps aux

top

Hiển thị các tiến trình đang chạy một cách tương tác, giúp bạn theo dõi tài nguyên CPU, RAM.

top

htop

Một phiên bản nâng cao và thân thiện hơn của top.

htop

kill -9 <PID>

Buộc một tiến trình phải dừng lại ngay lập tức. Thay <PID> bằng ID của tiến trình.

kill -9 12345

nohup <command> &

Chạy một lệnh trong nền, đảm bảo nó vẫn tiếp tục chạy ngay cả khi bạn đóng terminal.

nohup python train.py &

jobs

Hiển thị các job đang chạy trong nền của terminal hiện tại.

jobs

journalctl -u <service>

Xem nhật ký của một dịch vụ hệ thống.

journalctl -u docker.service

systemctl status <service>

Xem trạng thái của một dịch vụ.

systemctl status postgresql.service

systemctl start <service>

Khởi động một dịch vụ.

systemctl start docker

systemctl restart <service>

Khởi động lại một dịch vụ.

systemctl restart nginx

systemctl stop <service>

Dừng một dịch vụ.

systemctl stop uvicorn

1.1.6.3. 3. Quản lý Hệ thống và Mạng#

Lệnh

Chức năng

Ví dụ

df -h

Hiển thị dung lượng ổ đĩa.

df -h

free -h

Hiển thị dung lượng RAM.

free -h

ping <hostname/IP>

Kiểm tra kết nối mạng đến một máy chủ.

ping google.com

netstat -tuln

Liệt kê các cổng mạng đang lắng nghe.

netstat -tuln

curl <url>

Truyền dữ liệu đến hoặc từ một URL. Rất hữu ích để kiểm tra API.

curl [http://localhost:8000/predict](http://localhost:8000/predict)

telnet <IP> <port>

Kiểm tra kết nối đến một cổng cụ thể, rất hữu ích để debug network.

telnet localhost 5432

mount

Hiển thị các hệ thống file đang được gắn. Lệnh này hữu ích khi bạn cần truy cập vào một ổ đĩa hoặc phân vùng dữ liệu.

mount

ss -tuln

Xem socket mạng đang lắng nghe. ss là một công cụ hiện đại hơn netstat.

ss -tuln

wget <url>

Tải file từ internet.

wget https://example.com/data.zip

1.1.6.4. 4. Quản lý Gói và Cài đặt#

Lệnh

Chức năng

Ví dụ

sudo dnf update

Cập nhật tất cả các gói đã cài đặt.

sudo dnf update

sudo dnf install <package>

Cài đặt một gói phần mềm.

sudo dnf install git -y

sudo dnf remove <package>

Gỡ bỏ một gói phần mềm.

sudo dnf remove git -y

dnf search <keyword>

Tìm kiếm các gói có chứa từ khóa.

dnf search "nvidia-driver"

dnf list installed

Liệt kê các gói đã được cài đặt.

dnf list installed

pip list

Liệt kê các thư viện Python đã cài đặt trong môi trường ảo hiện tại.

pip list

pip install <package>

Cài đặt một thư viện Python.

pip install numpy

pyenv virtualenv <name>

Tạo một môi trường ảo Python mới.

pyenv virtualenv 3.12.10 my_project_env

pyenv activate <name>

Kích hoạt môi trường ảo Python.

pyenv activate my_project_env

pyenv deactivate

Hủy kích hoạt môi trường ảo.

pyenv deactivate