安装 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.whlmain
此文件是二进制文件。 显示原始文件
下载torchcodec
github.com/time2k/torchcodec_for_aarch64 torchcodec-0.8.1-cp312-cp312-linux_aarch64.whlmain
此文件是二进制文件。 显示原始文件
将下载的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 位参与者