| |
| |
| |
| |
|
|
| |
| Write-Host "[INFO] Activating quark_0.11 conda environment..." |
| & "C:\ProgramData\miniforge3\Scripts\conda.exe" activate quark_0.11 |
|
|
| |
| $env:TORCHINDUCTOR_DISABLE = "1" |
| $env:TORCH_COMPILE_DISABLE = "1" |
|
|
| |
| $PYTHON_EXE = "C:\ProgramData\miniforge3\envs\quark_0.11\python.exe" |
|
|
| |
| Write-Host "[INFO] Checking package versions..." |
| $PYTHON_VERSION = & $PYTHON_EXE -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}')" 2>&1 |
| $TORCH_VERSION = & $PYTHON_EXE -c "import torch; print(torch.__version__)" 2>&1 |
| $TRANSFORMERS_VERSION = & $PYTHON_EXE -c "import transformers; print(transformers.__version__)" 2>&1 |
| $QUARK_VERSION = & $PYTHON_EXE -c "import quark; print(quark.__version__)" 2>&1 |
|
|
| Write-Host "[INFO] Python: $PYTHON_VERSION, Torch: $TORCH_VERSION, Transformers: $TRANSFORMERS_VERSION, Quark: $QUARK_VERSION" |
| Write-Host "" |
|
|
| |
| $PYTHON_SCRIPT = "quantize_quark.py" |
| $MODEL_DIR = "microsoft/Phi-4-mini-instruct" |
| $OUTPUT_DIR = "phi4_gptq_grp128_exlmhead" |
| $DATA_TYPE = "bfloat16" |
| |
|
|
| $GROUP_SIZE = 128 |
| |
| |
|
|
| $EXCLUDE_LMHEAD = $true |
| |
| |
|
|
| |
| |
| |
|
|
| Write-Host "" |
| Write-Host "[INFO] Starting quantization..." |
| Write-Host " Model : $MODEL_DIR" |
| Write-Host " Output dir : $OUTPUT_DIR" |
| Write-Host " Data type : $DATA_TYPE" |
| Write-Host " Group size : $GROUP_SIZE" |
| Write-Host " Exclude lm_head: $EXCLUDE_LMHEAD" |
| Write-Host "" |
|
|
| |
| $QUANT_SCHEME = "uint4_wo_$GROUP_SIZE" |
|
|
| |
| $args = @( |
| "--model_dir", "$MODEL_DIR", |
| "--output_dir", "$OUTPUT_DIR", |
| "--device", "cpu", |
| "--quant_scheme", "$QUANT_SCHEME", |
| "--num_calib_data", "128", |
| "--seq_len", "512", |
| "--quant_algo", "gptq", |
| "--dataset", "pileval_for_awq_benchmark", |
| "--model_export", "hf_format", |
| "--data_type", "$DATA_TYPE" |
| ) |
|
|
| |
| if (-not $EXCLUDE_LMHEAD) { |
| $args += "--exclude_layers" |
| } |
|
|
| |
| & $PYTHON_EXE $PYTHON_SCRIPT $args 2>&1 | Tee-Object -FilePath screen.dump.log |
|
|
| Write-Host "" |
| if ($LASTEXITCODE -eq 0) { |
| Write-Host "[INFO] Quantization complete. Output saved to: $OUTPUT_DIR" |
| Write-Host "[INFO] Full log saved to: screen.dump.log" |
|
|
| |
| Write-Host "" |
| Write-Host "[INFO] Copying files to output directory..." |
|
|
| $LOG_FILE = "screen.dump.log" |
| $PS_SCRIPT = $MyInvocation.MyCommand.Path |
|
|
| |
| Write-Host "[INFO] Converting $LOG_FILE to UTF-8..." |
| $LOG_CONTENT = Get-Content $LOG_FILE -Encoding Unicode -Raw -ErrorAction SilentlyContinue |
| if ($LOG_CONTENT) { |
| $LOG_DEST = Join-Path $OUTPUT_DIR $LOG_FILE |
| Set-Content -Path $LOG_DEST -Value $LOG_CONTENT -Encoding UTF8 |
| Write-Host "[INFO] Copied $LOG_FILE to $OUTPUT_DIR (converted to UTF-8)" |
| } else { |
| |
| Copy-Item $LOG_FILE -Destination $OUTPUT_DIR -Force |
| Write-Host "[INFO] Copied $LOG_FILE to $OUTPUT_DIR" |
| } |
|
|
| Copy-Item $PYTHON_SCRIPT -Destination $OUTPUT_DIR -Force |
| Copy-Item $PS_SCRIPT -Destination $OUTPUT_DIR -Force |
|
|
| Write-Host "[INFO] Copied $PYTHON_SCRIPT to $OUTPUT_DIR" |
| Write-Host "[INFO] Copied $(Split-Path $PS_SCRIPT -Leaf) to $OUTPUT_DIR" |
|
|
| |
| Write-Host "" |
| Write-Host "[INFO] Creating README.md in output directory..." |
| $README_PATH = Join-Path $OUTPUT_DIR "README.md" |
|
|
| |
| $LOG_PATH = Join-Path $OUTPUT_DIR $LOG_FILE |
| $PERPLEXITY = "N/A" |
| if (Test-Path $LOG_PATH) { |
| $lastLine = Get-Content $LOG_PATH -Tail 1 |
| if ($lastLine -match "Perplexity:\s+([\d\.]+)") { |
| $PERPLEXITY = $matches[1] |
| } |
| } |
|
|
| |
| $LMHEAD_STATUS = if ($EXCLUDE_LMHEAD) { "excluded" } else { "included" } |
|
|
| |
| $QUARK_COMMAND = "python $PYTHON_SCRIPT --model_dir $MODEL_DIR --output_dir $OUTPUT_DIR --device cpu --quant_scheme $QUANT_SCHEME --num_calib_data 128 --seq_len 512 --quant_algo awq --dataset pileval_for_awq_benchmark --model_export hf_format --data_type $DATA_TYPE" |
| if (-not $EXCLUDE_LMHEAD) { |
| $QUARK_COMMAND += " --exclude_layers" |
| } |
|
|
| |
| $README_CONTENT = @" |
| # Quark Quantization Details |
| |
| **Package Versions**: |
| - Python: $PYTHON_VERSION |
| - PyTorch: $TORCH_VERSION |
| - Transformers: $TRANSFORMERS_VERSION |
| - Quark: $QUARK_VERSION |
| |
| **Quantization Setup**: AWQ, Group Size $GROUP_SIZE, $DATA_TYPE, lm_head $LMHEAD_STATUS |
| |
| **Perplexity**: $PERPLEXITY |
| |
| **Quark Command**: |
| `````` |
| $QUARK_COMMAND |
| `````` |
| "@ |
|
|
| Set-Content -Path $README_PATH -Value $README_CONTENT -Encoding UTF8 |
| Write-Host "[INFO] Created README.md in $OUTPUT_DIR (Perplexity: $PERPLEXITY)" |
| } else { |
| Write-Host "[ERROR] Quantization failed with exit code $LASTEXITCODE" |
| Write-Host "[INFO] Check screen.dump.log for details" |
| } |
|
|
| Write-Host "" |
| Write-Host "Press any key to continue..." |
| $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") |
|
|