NPU_TORCH_VERSION=${NPU_TORCH_VERSION:-2.7.1} NPU_TORCH_NPU_VERSION=${NPU_TORCH_NPU_VERSION:-2.7.1.post2} NPU_MODELSCOPE_VERSION=${NPU_MODELSCOPE_VERSION:-1.37.0} NPU_PIP_INDEX=${NPU_PIP_INDEX:-https://mirrors.aliyun.com/pypi/simple/} NPU_CONSTRAINT_FILE=${NPU_CONSTRAINT_FILE:-/tmp/ms_swift_npu_constraints.txt} NPU_PIP_BLOCK_CUDA_DEPS=${NPU_PIP_BLOCK_CUDA_DEPS:-True} print_npu_warning() { echo "======================================================================" echo "WARNING: NPU runtime is unavailable, tests will continue on CPU path" echo "======================================================================" } setup_npu_pip_constraints() { cat >"$NPU_CONSTRAINT_FILE" <>"$NPU_CONSTRAINT_FILE" <<'EOF' # NPU CI should not resolve CUDA runtime wheels. If a dependency starts requiring # these packages, fail in pip's resolver instead of downloading hundreds of MB. cuda-toolkit<0 nvidia-cublas<0 nvidia-cuda-runtime<0 nvidia-cuda-nvrtc<0 nvidia-cuda-cupti<0 nvidia-cudnn<0 nvidia-cufft<0 nvidia-curand<0 nvidia-cusolver<0 nvidia-cusparse<0 nvidia-nccl<0 nvidia-nvjitlink<0 nvidia-nvtx<0 nvidia-cublas-cu12<0 nvidia-cuda-runtime-cu12<0 nvidia-cuda-nvrtc-cu12<0 nvidia-cuda-cupti-cu12<0 nvidia-cudnn-cu12<0 nvidia-cufft-cu12<0 nvidia-curand-cu12<0 nvidia-cusolver-cu12<0 nvidia-cusparse-cu12<0 nvidia-cusparselt-cu12<0 nvidia-nccl-cu12<0 nvidia-nvjitlink-cu12<0 nvidia-nvtx-cu12<0 EOF fi export PIP_CONSTRAINT="$NPU_CONSTRAINT_FILE" export UV_CONSTRAINT="$NPU_CONSTRAINT_FILE" echo "Using NPU pip constraints: $PIP_CONSTRAINT" cat "$PIP_CONSTRAINT" } is_npu_runtime_matched() { python - </dev/null 2>&1; then npu-smi info || echo "WARNING: npu-smi info failed." else echo "WARNING: npu-smi not found." fi python - <<'PY' import importlib.util import os warning = 'WARNING: NPU runtime is unavailable, tests will continue on CPU path' print(f"ASCEND_RT_VISIBLE_DEVICES={os.environ.get('ASCEND_RT_VISIBLE_DEVICES', '')}") print(f"CUDA_VISIBLE_DEVICES={os.environ.get('CUDA_VISIBLE_DEVICES', '')}") try: import torch print(f"torch={torch.__version__}") except Exception as e: print(f"WARNING: failed to import torch: {e!r}") print('=' * 70) print(warning) print('=' * 70) raise SystemExit(0) try: import transformers print(f"transformers={transformers.__version__}") except Exception as e: print(f"WARNING: failed to import transformers: {e!r}") if importlib.util.find_spec('torch_npu') is None: print('WARNING: torch_npu is not installed.') print('=' * 70) print(warning) print('=' * 70) raise SystemExit(0) try: import torch_npu print(f"torch_npu={getattr(torch_npu, '__version__', 'unknown')}") except Exception as e: print(f"WARNING: failed to import torch_npu: {e!r}") print('=' * 70) print(warning) print('=' * 70) raise SystemExit(0) try: npu = getattr(torch, 'npu', None) available = bool(npu is not None and npu.is_available()) count = npu.device_count() if npu is not None else 0 print(f"torch.npu.is_available={available}") print(f"torch.npu.device_count={count}") if not available: print('=' * 70) print(warning) print('=' * 70) except Exception as e: print(f"WARNING: failed to query torch.npu status: {e!r}") print('=' * 70) print(warning) print('=' * 70) PY echo "============================================================" } if [ "$MODELSCOPE_SDK_DEBUG" == "True" ]; then if [ "$SWIFT_CI_USE_NPU" == "True" ]; then pip install uv -i https://mirrors.aliyun.com/pypi/simple/ setup_npu_pip_constraints ensure_npu_runtime uv pip install -r requirements/tests.txt git config --global --add safe.directory /ms-swift git config --global user.email tmp git config --global user.name tmp.com # linter test if [ `git remote -v | grep alibaba | wc -l` -gt 1 ]; then pre-commit run -c .pre-commit-config_local.yaml --all-files if [ $? -ne 0 ]; then echo "linter test failed" exit -1 fi fi ensure_npu_runtime uv pip install -r requirements/framework.txt -U "transformers<5.0" "peft<0.19" "modelscope==1.37.0" ensure_npu_runtime uv pip install decord einops -U uv pip uninstall autoawq uv pip install optimum uv pip install diffusers uv pip install math-verify -i "$NPU_PIP_INDEX" uv pip install ray -i "$NPU_PIP_INDEX" uv pip install msgspec -i "$NPU_PIP_INDEX" uv pip install zmq -i "$NPU_PIP_INDEX" uv pip install . echo "NPU CI skips auto_gptq because it is a CUDA/GPTQ optional dependency." uv pip install bitsandbytes deepspeed -U if [ -f requirements/npu.txt ]; then uv pip install -r requirements/npu.txt fi ensure_npu_runtime report_npu_runtime else pip install -r requirements/tests.txt -i https://mirrors.aliyun.com/pypi/simple/ git config --global --add safe.directory /ms-swift git config --global user.email tmp git config --global user.name tmp.com # linter test if [ `git remote -v | grep alibaba | wc -l` -gt 1 ]; then pre-commit run -c .pre-commit-config_local.yaml --all-files if [ $? -ne 0 ]; then echo "linter test failed" exit -1 fi fi pip install -r requirements/framework.txt -U -i https://mirrors.aliyun.com/pypi/simple/ pip install decord einops -U -i https://mirrors.aliyun.com/pypi/simple/ pip uninstall autoawq -y pip install optimum pip install diffusers pip install "transformers<5.0" "peft<0.19" pip install . pip install auto_gptq bitsandbytes deepspeed -U -i https://mirrors.aliyun.com/pypi/simple/ fi else echo "Running case in release image, run case directly!" fi # remove torch_extensions folder to avoid ci hang. rm -rf ~/.cache/torch_extensions if [ $# -eq 0 ]; then ci_command="python tests/run.py --subprocess" else ci_command="$@" fi echo "Running case with command: $ci_command" $ci_command