|
Download README.md from dougvk/Unlimited-OCR-RDNA4: direct link, hf CLI and curl.
- Browser
- Download file 9.33 kB
-
https://huggingface.co/dougvk/Unlimited-OCR-RDNA4/resolve/main/README.md
- Command line
-
hf download hf://dougvk/Unlimited-OCR-RDNA4/README.md
-
curl -L -o README.md https://huggingface.co/dougvk/Unlimited-OCR-RDNA4/resolve/main/README.md
9.33 kB
| pipeline_tag: image-text-to-text | |
| license: mit | |
| tags: | |
| - rocm | |
| - amd | |
| - rdna4 | |
| - gfx1201 | |
| - ocr | |
| - runtime | |
| # Unlimited-OCR RDNA 4 | |
| Single-GPU [Baidu Unlimited-OCR](https://huggingface.co/baidu/Unlimited-OCR) inference for AMD RDNA 4 | |
| (`gfx1200` / `gfx1201`) using native ROCm PyTorch, verified end to end on `gfx1201`. | |
| This project does **not** redistribute or rename Baidu's weights. It provides a reproducible runtime around the original | |
| BF16 checkpoint: an isolated AMD wheel bootstrap, pinned model preparation, audited custom-code patching, single-GPU | |
| selection, local-only model resolution during inference, atomic output, bounded PDF handling, diagnostics, and | |
| validation evidence. | |
| > Status: beta. Verified on 31 July 2026 with an AMD Radeon RX 9070 XT (`gfx1201`). This is not an AMD or Baidu project. | |
| ## Verified configuration | |
| | Component | Verified value | | |
| |---|---| | |
| | GPU | AMD Radeon RX 9070 XT, 16 GB | | |
| | GPU allocation | One isolated GPU | | |
| | OS | Ubuntu 24.04.4 | | |
| | Kernel | 6.17.0-40-generic | | |
| | Host ROCm | 7.2.1 | | |
| | PyTorch | 2.9.1 + ROCm 7.2.1 | | |
| | Transformers | 4.57.1 | | |
| | Matplotlib | 3.10.8 | | |
| | Model revision | `07dea832e22aefee32ad281d4b80551282e1c168` | | |
| | Weight precision | Original BF16; no quantization | | |
| | Peak allocated VRAM | 8.25 GiB on the 1600×2000 validation page | | |
| The initial validation recovered headings, reading order, a structured table, euro amounts, a formula, and an exact | |
| checksum. Repeated greedy generation was byte-identical after deterministic tag cleanup. See | |
| [docs/VALIDATION.md](docs/VALIDATION.md) for the evidence and its limits. | |
| ## Quick start | |
| The bootstrap downloads checksum-pinned AMD ROCm wheels into your XDG cache, installs every other runtime/build | |
| dependency from `requirements/bootstrap.lock` with hashes required, builds this checkout without build isolation, and | |
| creates a repository-local virtual environment. It does not use `sudo`, alter `/opt/rocm`, or touch the system Python. | |
| ```bash | |
| git clone https://huggingface.co/dougvk/Unlimited-OCR-RDNA4 | |
| cd Unlimited-OCR-RDNA4 | |
| ./scripts/bootstrap-rocm.sh | |
| .venv/bin/unlimited-ocr-rdna4 prepare | |
| .venv/bin/unlimited-ocr-rdna4 run --input page.png | |
| ``` | |
| The model download is approximately 6.78 GB. The verified AMD wheel set is approximately 1.9 GB before installation. | |
| PDFs are rendered and parsed page by page: | |
| ```bash | |
| .venv/bin/unlimited-ocr-rdna4 run \ | |
| --input document.pdf \ | |
| --output document.md \ | |
| --max-pages 10 \ | |
| --dpi 200 | |
| ``` | |
| ## Commands | |
| ### `prepare` | |
| Downloads the pinned original checkpoint, fully hashes the 6.67 GB safetensors file and every behavior-defining model, | |
| configuration, tokenizer, and index file, preserves Baidu's original model source, and applies a narrowly scoped audited | |
| patch. | |
| ```bash | |
| unlimited-ocr-rdna4 prepare | |
| unlimited-ocr-rdna4 prepare --dry-run --json | |
| unlimited-ocr-rdna4 prepare --model-dir /data/models/unlimited-ocr | |
| ``` | |
| Preparation is serialized and idempotent. It uses a unique partial directory, validates the exact manifest and file set, | |
| and refuses unknown, extra, symlinked, or mismatched files instead of executing them. | |
| ### `doctor` | |
| Reports the active PyTorch/HIP stack, visible devices, RDNA 4 architecture, BF16 capability, and model readiness. | |
| ```bash | |
| unlimited-ocr-rdna4 doctor | |
| unlimited-ocr-rdna4 doctor --device 0 --require-model | |
| unlimited-ocr-rdna4 doctor --json | |
| ``` | |
| ### `run` | |
| Parses one image or PDF and publishes untrusted model output atomically. The content may include Markdown and raw HTML; | |
| do not render it in a privileged origin without sanitization. | |
| ```bash | |
| unlimited-ocr-rdna4 run --input scan.png | |
| unlimited-ocr-rdna4 run --input scan.png --output scan.md --device 0 | |
| unlimited-ocr-rdna4 run --input report.pdf --start-page 21 --max-pages 10 | |
| ``` | |
| Important flags: | |
| | Flag | Default | Meaning | | |
| |---|---:|---| | |
| | `--device` | `$UNLIMITED_OCR_DEVICE` or `0` | ROCm ordinal or stable ROCr UUID | | |
| | `--mode` | `gundam` | `gundam` for detailed single-page parsing; `base` for lower-detail input | | |
| | `--max-length` | `4096` | Total input + output sequence limit; maximum `32768` | | |
| | `--dpi` | `200` | PDF rendering resolution | | |
| | `--max-pages` | `20` | Per-run PDF safety cap | | |
| | `--max-page-pixels` | `60000000` | Per-page rendered-pixel cap | | |
| | `--max-total-pixels` | `400000000` | Aggregate rendered-pixel cap | | |
| | `--max-page-rendered-mib` | `512` | Per-page rendered temporary-byte cap | | |
| | `--max-rendered-mib` | `2048` | Aggregate rendered temporary-byte cap | | |
| | `--force` | off | Replace an existing output file | | |
| | `--json` | off | Stable machine-readable summary on stdout | | |
| | `--quiet` | off | Suppress progress diagnostics | | |
| OCR content is written to the output file. Progress and warnings go to stderr. Human or JSON summaries go to stdout. | |
| ## GPU selection | |
| PyTorch uses the CUDA-compatible API name on ROCm. `--device` sets `ROCR_VISIBLE_DEVICES` before PyTorch is imported, so | |
| the process sees one logical `cuda:0` backed by the selected AMD card. | |
| For ordinary one-GPU systems: | |
| ```bash | |
| unlimited-ocr-rdna4 run --input page.png --device 0 | |
| ``` | |
| For multi-GPU systems, a stable ROCr UUID avoids dependence on enumeration order: | |
| ```bash | |
| unlimited-ocr-rdna4 run --input page.png --device GPU-0123456789abcdef | |
| ``` | |
| Run `unlimited-ocr-rdna4 doctor` before choosing a device. Do not assume another application's GPU numbering matches | |
| ROCm's ordinal numbering. | |
| ## What the RDNA 4 adaptation changes | |
| - Pins the Baidu checkpoint and verifies the complete expected local model tree before custom code loads. | |
| - Uses AMD's production ROCm 7.2.1 PyTorch, torchvision, and Triton wheels for Python 3.12. | |
| - Isolates one `gfx1200`/`gfx1201` GPU before importing PyTorch. | |
| - Replaces unsafe `eval()` calls in optional model-output geometry parsing with `ast.literal_eval()`. | |
| - Makes one internal mask transfer follow the active tensor device. | |
| - Supplies the missing all-ones attention mask and pad token for single-sequence generation. | |
| - Loads only the prepared local model during inference and enables Hugging Face offline mode. | |
| - Avoids vLLM, SGLang, quantization, tensor parallelism, and unverified custom serving kernels. | |
| - Removes only complete, exact layout sentinel pairs without rewriting recognized Unicode or TeX. | |
| - Detects obvious terminal repetition and warns without silently rewriting recognition content. | |
| The model weights and mathematical operators are unchanged. PyTorch's ROCm backend provides the RDNA 4 kernels. | |
| ## Configuration | |
| Precedence is flags, then environment variables, then XDG defaults. | |
| | Environment variable | Purpose | | |
| |---|---| | |
| | `UNLIMITED_OCR_DEVICE` | Default ROCm ordinal or UUID | | |
| | `UNLIMITED_OCR_MODEL_DIR` | Prepared model directory | | |
| | `XDG_DATA_HOME` | Default model storage root | | |
| | `XDG_CACHE_HOME` | Wheel, Hugging Face, and temporary-work cache root | | |
| | `NO_COLOR` | Accepted implicitly; the CLI currently emits no color | | |
| This project contains no analytics or telemetry code. | |
| ## Safety and limitations | |
| - The default 4096 sequence limit includes visual-prefill tokens. Dense pages may require a larger value. | |
| - PDF mode uses permissively licensed PDFium bindings and renders one bounded page at a time. A failed run leaves no | |
| published partial document; retry with `--start-page` to resume manually. | |
| - Generative OCR can omit or hallucinate content. Verify consequential documents against the source. | |
| - Rotated text and repetitive pages are known upstream weak spots. | |
| - Only the configuration above has completed the full repository acceptance test. Newer ROCm/PyTorch versions may work, | |
| but `doctor` reports them as unverified until measured. | |
| - The hardware guard accepts `gfx1200`, but reports `hardware_verified=false`; only `gfx1201` has completed this GPU gate. | |
| - The bootstrap currently supports Linux x86_64, Python 3.12, and host ROCm 7.2.1. | |
| See [SECURITY.md](SECURITY.md) before processing untrusted documents. | |
| ## Development | |
| CPU-only tests do not install PyTorch. The commands below are convenient for development; the release bootstrap is the | |
| hash-locked installation path. | |
| ```bash | |
| python3.12 -m venv .venv-dev | |
| .venv-dev/bin/pip install -e '.[dev]' | |
| .venv-dev/bin/ruff check . | |
| .venv-dev/bin/ruff format --check . | |
| .venv-dev/bin/pytest | |
| .venv-dev/bin/python -m build | |
| .venv-dev/bin/twine check dist/* | |
| ``` | |
| The GPU smoke gate is intentionally separate. It uses tracked, hash-checked fixtures; parses structured JSON; runs the | |
| image twice in fresh processes; and checks image/PDF output hashes, structure, stack identity, revision, VRAM, and process | |
| release. On the validated host, run it in a root-created private network namespace: | |
| ```bash | |
| VALIDATION_NETWORK_ISOLATED=1 \ | |
| UNLIMITED_OCR_DEVICE=GPU-0123456789abcdef \ | |
| AMD_SMI_GPU=3 \ | |
| ./scripts/validate-smoke.sh | |
| ``` | |
| ## Credits and license | |
| - Model and model code: [Baidu Unlimited-OCR](https://github.com/baidu/Unlimited-OCR), MIT licensed. | |
| - ROCm evaluation and batching research: [AIwork4me/Unlimited-OCR-ROCm](https://github.com/AIwork4me/Unlimited-OCR-ROCm). | |
| - AMD wheel source and compatibility guidance: [ROCm documentation](https://rocm.docs.amd.com/). | |
| - PDF rendering: [pypdfium2](https://pypi.org/project/pypdfium2/) and PDFium, under permissive licenses. | |
| The runtime is MIT licensed. Baidu's original copyright and license are preserved; see | |
| [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). | |