DGX spark安装MiniCPM-o 4.5

DGX spark安装MiniCPM-o 4.5
DGX spark安装MiniCPM-o 4.5

安装 Python 3.12

使用 miniconda 安装 Python 3.12

mkdir -p ./miniconda3_install_tmp

# Download the miniconda3 installation script
wget https://repo.anaconda.com/miniconda/Miniconda3-py312_26.3.2-2-Linux-aarch64.sh -O ./miniconda3_install_tmp/miniconda.sh 

# Install miniconda3 into the project directory
bash ./miniconda3_install_tmp/miniconda.sh -b -u -p ./miniconda3 

安装完成后,您将获得一个空的初始环境。请激活此初始环境,它默认使用 Python 3.12。

source ./miniconda3/bin/activate
python --version # Should display 3.12.x

进入项目目录中拉取官方demo项目

cd miniconda3
git clone https://github.com/OpenBMB/MiniCPM-o-Demo.git

下载decord

github.com/csabakecskemeti/dgx_spark_prebuilds decord/decord-0.6.0-cp312-cp312-linux_aarch64.whl main 此文件是二进制文件。 显示原始文件

下载torchcodec

github.com/time2k/torchcodec_for_aarch64 torchcodec-0.8.1-cp312-cp312-linux_aarch64.whl main 此文件是二进制文件。 显示原始文件

将下载的decord、torchcodec包放到MiniCPM-o-Demo目录内

修改install.sh文件

修改python版本号为3.12

PYTHON="${PYTHON:-python3.12}"

修改torch、torchaudio安装版本,增加torchcodec、decord安装

修改前

${PIP} install "torch==2.8.0" "torchaudio==2.8.0"

修改后

${PIP} install torch==2.9.0+cu130 torchaudio==2.9.0 --index-url https://download.pytorch.org/whl/cu130
${PIP} install torchcodec-0.8.1-cp312-cp312-linux_aarch64.whl
${PIP} install decord-0.6.0-cp312-cp312-linux_aarch64.whl

完整install.sh文件内容

#!/bin/bash
# MiniCPMO45 Service One-Click Environment Installation Script
#
# Usage:
#   cd minicpmo45_service
#   bash install.sh
#
# Features:
#   1. Create a Python 3.10 virtual environment
#   2. Install PyTorch + core dependencies
#   3. Attempt to install Flash Attention 2 (auto-skip on failure, fallback to SDPA)
#   4. Verify installation results
#
# Environment Variables (optional):
#   PYTHON=python3.11        Specify Python interpreter (default: python3.10)
#   SKIP_FLASH_ATTN=1        Skip Flash Attention installation
#   MAX_JOBS=8               Flash Attention compilation parallelism (default: nproc)

set -e  # Exit on error (flash-attn section handled separately)

# ============ Configuration ============

VENV_DIR=".venv/base"
PIP="${VENV_DIR}/bin/pip"
PYTHON_BIN="${VENV_DIR}/bin/python"
PYTHON="${PYTHON:-python3.12}"
MAX_JOBS="${MAX_JOBS:-$(nproc 2>/dev/null || echo 8)}"
FLASH_ATTN_VERSION=">=2.7.1,<=2.8.2"  # Officially recommended version range

# ============ Colored Output ============

GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'  # No Color

info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }

# ============ Step 1: Create Virtual Environment ============

info "Step 1/4: Creating virtual environment (${VENV_DIR})"

if [ -d "${VENV_DIR}" ]; then
    warn "Virtual environment already exists: ${VENV_DIR}, skipping creation"
else
    if ! command -v "${PYTHON}" &> /dev/null; then
        error "${PYTHON} not found. Please install Python 3.10+ or specify the path via PYTHON=python3.x"
        exit 1
    fi

    PYTHON_VERSION=$("${PYTHON}" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
    info "Using Python ${PYTHON_VERSION} (${PYTHON})"

    "${PYTHON}" -m venv "${VENV_DIR}"
    info "Virtual environment created successfully"
fi

${PIP} install --upgrade pip -q

# ============ Step 2: Install PyTorch ============

info "Step 2/4: Installing PyTorch + torchaudio"

# Check if already installed (skip redundant installation)
if ${PYTHON_BIN} -c "import torch; print(torch.__version__)" 2>/dev/null | grep -q "2.8"; then
    TORCH_VER=$(${PYTHON_BIN} -c "import torch; print(torch.__version__)")
    CUDA_VER=$(${PYTHON_BIN} -c "import torch; print(torch.version.cuda)")
    info "PyTorch already installed: ${TORCH_VER} (CUDA ${CUDA_VER}), skipping"
else
    ${PIP} install torch==2.9.0+cu130 torchaudio==2.9.0 --index-url https://download.pytorch.org/whl/cu130
    ${PIP} install torchcodec-0.8.1-cp312-cp312-linux_aarch64.whl
    ${PIP} install decord-0.6.0-cp312-cp312-linux_aarch64.whl
    TORCH_VER=$(${PYTHON_BIN} -c "import torch; print(torch.__version__)")
    CUDA_VER=$(${PYTHON_BIN} -c "import torch; print(torch.version.cuda)")
    info "PyTorch installed successfully: ${TORCH_VER} (CUDA ${CUDA_VER})"
fi

# ============ Step 3: Install Core Dependencies ============

info "Step 3/4: Installing core dependencies (requirements.txt)"
${PIP} install -r requirements.txt
info "Core dependencies installed successfully"

# ============ Step 4: Install Flash Attention 2 (Not Recommended) ============

# info "Step 4/4: Installing Flash Attention 2 (optional, auto-skip on failure)"

# if [ "${SKIP_FLASH_ATTN}" = "1" ]; then
#     warn "SKIP_FLASH_ATTN=1, skipping Flash Attention installation"
#     warn "Inference will use PyTorch SDPA (approximately 5-15% slower)"
# else
#     # Check if already installed
#     if ${PYTHON_BIN} -c "import flash_attn; print(flash_attn.__version__)" 2>/dev/null; then
#         FA_VER=$(${PYTHON_BIN} -c "import flash_attn; print(flash_attn.__version__)")
#         info "Flash Attention already installed: ${FA_VER}, skipping"
#     else
#         info "Attempting to install flash-attn${FLASH_ATTN_VERSION} (MAX_JOBS=${MAX_JOBS})..."
#         info "This may take several minutes (compiling CUDA kernels)..."

#         set +e  # Temporarily disable errexit to allow failure
#         MAX_JOBS=${MAX_JOBS} ${PIP} install "flash-attn${FLASH_ATTN_VERSION}" --no-build-isolation 2>&1
#         FLASH_EXIT_CODE=$?
#         set -e  # Restore errexit

#         if [ ${FLASH_EXIT_CODE} -eq 0 ]; then
#             FA_VER=$(${PYTHON_BIN} -c "import flash_attn; print(flash_attn.__version__)")
#             info "Flash Attention installed successfully: ${FA_VER}"
#         else
#             warn "=========================================="
#             warn "Flash Attention installation failed (exit code: ${FLASH_EXIT_CODE})"
#             warn "This does not affect service operation — inference will automatically use PyTorch SDPA"
#             warn "Performance difference: SDPA is approximately 5-15% slower than Flash Attention"
#             warn ""
#             warn "Common causes:"
#             warn "  - CUDA toolkit version mismatch with PyTorch"
#             warn "  - Unsupported GPU architecture (requires SM80+, e.g. A100/H100)"
#             warn "  - Missing compilation toolchain (gcc/g++/nvcc)"
#             warn ""
#             warn "To retry manually:"
#             warn "  MAX_JOBS=${MAX_JOBS} ${PIP} install \"flash-attn${FLASH_ATTN_VERSION}\" --no-build-isolation"
#             warn "=========================================="
#         fi
#     fi
# fi

# ============ Installation Summary ============

echo ""
echo "============================================"
info "Installation complete! Environment summary:"
echo "============================================"

${PYTHON_BIN} -c "
import torch
print(f'  Python:       {__import__(\"sys\").version.split()[0]}')
print(f'  PyTorch:      {torch.__version__}')
print(f'  CUDA:         {torch.version.cuda}')
print(f'  GPU:          {torch.cuda.get_device_name(0) if torch.cuda.is_available() else \"N/A\"}')

try:
    import flash_attn
    print(f'  Flash Attn:   {flash_attn.__version__} ✓')
    attn_backend = 'flash_attention_2'
except ImportError:
    print(f'  Flash Attn:   Not installed (will use SDPA)')
    attn_backend = 'sdpa'

import transformers
print(f'  Transformers: {transformers.__version__}')
print()
print(f'  Attention Backend: {attn_backend}')
"

echo ""
info "Next steps:"
echo "  1. Configure model path:"
echo "     cp config.example.json config.json"
echo "     # Edit config.json and set model.model_path"
echo ""
echo "  2. Start the service:"
echo "     bash start_all.sh"
echo "============================================"

安装MiniCPM

执行安装脚本

bash install.sh

安装前端

cd frontend/mobile/
bun install

安装docs-app

cd -
cd docs-app
npm install
cd ..

复制配置文件

将项目目录中的 config.example.json 复制到 config.json

cp config.example.json config.json

修改config.json中的模型路径

模型路径( model_path )默认为 openbmb/MiniCPM-o-4_5 。如果您有 Hugging Face 的访问权限,则无需进行任何修改——模型将自动从 Hugging Face 拉取。

启动MiniCPM

bash start_all.sh

停止MiniCPM

pkill -f "gateway.py|worker.py"

1 个帖子 - 1 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文