> ## Documentation Index
> Fetch the complete documentation index at: https://ppio.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 在 GPU 容器实例中运行 MinerU Tianshu 实现文件格式转换

## 什么是 MinerU Tianshu

MinerU Tianshu 是一个企业级多 GPU 文档解析服务，适用于 RAG 数据预处理等场景。它结合 SQLite 任务队列 + LitServe GPU 负载均衡，支持将 PDF 等多种格式的文档转换为 Markdown 或 JSON 结构化数据，可以解决文档解析、多 GPU 调度、任务管理等生产环境痛点。

MinerU Tianshu 的核心特性如下：

* **高性能架构**
  * Worker 主动拉取：0.5秒响应速度，无需调度器触发
  * 并发安全：原子操作防止任务重复，支持多 Worker 并发
  * GPU 负载均衡：LitServe 自动调度，避免显存冲突
  * 多 GPU 隔离：每个进程只使用分配的 GPU ，彻底解决多卡占用
* **企业级功能**
  * 异步处理：客户端立即响应（\~ 100 ms），无需等待处理完成
  * 任务持久化：SQLite 存储，服务重启任务不丢失
  * 优先级队列：重要任务优先处理
  * 自动清理：定期清理旧结果文件，保留数据库记录
* **智能解析**
  * 双解析器：PDF / 图片用 MinerU（GPU加速）， Office / HTML 等用 MarkItDown（快速）
  * 内容获取：API 自动返回 Markdown 内容，支持图片上传到 MinIO
  * RESTful API：支持任何编程语言接入
  * 实时查询：随时查看任务进度和状态

如需了解更多，请在[MinerU 项目官方网站](https://github.com/opendatalab/MinerU/tree/master)上查看详细信息。

## 运行 MinerU Tianshu

1. 进入[算力市场页面](https://ppio.com/gpu-instance/console/explore)。
2. 单击「选择模板」，找到 **MinerU Tianshu** ，单击「使用模板」。
   <img src="https://mintcdn.com/ppinfra/-ffZxKUcWcNh5Zwk/gpu/image/tianshu-1.png?fit=max&auto=format&n=-ffZxKUcWcNh5Zwk&q=85&s=483ee71490aa09a1134a5a53a40330e9" alt="tianshu-1" width="600" data-path="gpu/image/tianshu-1.png" />
3. 按照需要，选择计费方式、地区、实例规格等配置。
   <img src="https://mintcdn.com/ppinfra/-ffZxKUcWcNh5Zwk/gpu/image/tianshu-2.png?fit=max&auto=format&n=-ffZxKUcWcNh5Zwk&q=85&s=52fcf125c3b942cc6b6b4dd5c9b6a585" alt="tianshu-2" width="1000" data-path="gpu/image/tianshu-2.png" />
4. 检查磁盘大小，并在环境变量中替换 OSS 信息。
   <img src="https://mintcdn.com/ppinfra/-ffZxKUcWcNh5Zwk/gpu/image/tianshu-3.png?fit=max&auto=format&n=-ffZxKUcWcNh5Zwk&q=85&s=db1fb3299d4fb0661cc85f6fbd6717b6" alt="tianshu-3" width="1000" data-path="gpu/image/tianshu-3.png" />
5. 确认配置无误后，单击「部署」。
6. 进入[实例管理页面](https://ppio.com/gpu-instance/console/instances)，查看新创建的实例。等待实例创建成功，状态变为运行中。
   <img src="https://mintcdn.com/ppinfra/-ffZxKUcWcNh5Zwk/gpu/image/tianshu-4.png?fit=max&auto=format&n=-ffZxKUcWcNh5Zwk&q=85&s=f0135854e4bec3443afd03cbb3725a8a" alt="tianshu-4" width="1000" data-path="gpu/image/tianshu-4.png" />
7. 查看实例日志，确保服务正常启动。
   <img src="https://mintcdn.com/ppinfra/-ffZxKUcWcNh5Zwk/gpu/image/tianshu-5.png?fit=max&auto=format&n=-ffZxKUcWcNh5Zwk&q=85&s=b5c30c197d0ca6a4cb8b89c69c22b640" alt="tianshu-5" width="1000" data-path="gpu/image/tianshu-5.png" />

## 使用 MinerU Tianshu

1. 在[实例管理页面](https://ppio.com/gpu-instance/console/instances)，单击实例对应的「连接」。
2. 在弹出的对话框中，获取 HTTP 服务地址。
   <img src="https://mintcdn.com/ppinfra/-ffZxKUcWcNh5Zwk/gpu/image/tianshu-7.png?fit=max&auto=format&n=-ffZxKUcWcNh5Zwk&q=85&s=4cab6056b34f481fba7f1d25cac13c00" alt="tianshu-7" width="1000" data-path="gpu/image/tianshu-7.png" />
3. 启动 Web Terminal，然后通过 Web Terminal 远程连接实例。
   <img src="https://mintcdn.com/ppinfra/-ffZxKUcWcNh5Zwk/gpu/image/tianshu-6.png?fit=max&auto=format&n=-ffZxKUcWcNh5Zwk&q=85&s=db11d5cbfd949fd14464d8135ff91e6d" alt="tianshu-6" width="1000" data-path="gpu/image/tianshu-6.png" />
4. 在 Web Terminal 中，切换到`/vllm-workspace/MinerU/projects/mineru_tianshu`目录。
5. 创建 test\_auto\_upload\_images.py。

   test\_auto\_upload\_images.py 的代码示例如下，请将`API_BASE_URL`的值替换为实际的 HTTP 服务地址，将`LOCAL_PDF_PATH`的值和`OUTPUT_DIR`的值替换为测试的实际路径。

   ```bash theme={null}
   # ==================== 配置 ====================
   API_BASE_URL = "http://localhost:8000"  
   LOCAL_PDF_PATH = "./1.pdf"  # 要上传的 PDF 文件路径
   OUTPUT_DIR = "./auto_upload_output"  # 本地保存目录
   ```
6. 运行 test\_auto\_upload\_images.py。

   ```bash theme={null}
   python3 test_auto_upload_images.py
   ```

   预期返回：

   ```bash theme={null}
   ============================================================
   MinerU Tianshu - 自动上传图片到对象存储示例
   ============================================================

   📋 Step 1: Submit task
   ------------------------------------------------------------
   📤 Submitting task: demo1.pdf
      Backend: http-client
      Parse method: auto
      Languages: ['zh']
   ✅ Task submitted successfully!
      Task ID: 4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3

   📋 Step 2: Wait for task completion
   ------------------------------------------------------------
   ⏳ Waiting for task 4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3 to complete...
      Status: pending (elapsed: 0.0s)
      Status: processing (elapsed: 2.0s)
      Status: processing (elapsed: 4.0s)
      Status: processing (elapsed: 6.0s)
      Status: processing (elapsed: 8.0s)
      Status: processing (elapsed: 10.0s)
      Status: processing (elapsed: 12.0s)
      Status: processing (elapsed: 14.0s)
      Status: processing (elapsed: 16.0s)
      Status: processing (elapsed: 18.0s)
      Status: processing (elapsed: 20.0s)
      Status: processing (elapsed: 22.0s)
      Status: processing (elapsed: 24.0s)
      Status: processing (elapsed: 26.0s)
   ✅ Task completed!

   📋 Step 3: Get results with auto image upload to storage
   ------------------------------------------------------------
   🖼️  Requesting API to upload images to object storage...
   ✅ Results retrieved successfully!
      Markdown file: demo1.md
      Content length: 51753 characters
      Images uploaded to storage: True

   📋 Step 4: Save results to local
   ------------------------------------------------------------
   ✅ Saved Markdown to: auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3_demo1.md
   ✅ Saved metadata to: auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3_metadata.json

   📋 Step 5: Download images from storage to local
   ------------------------------------------------------------
   🖼️  Downloading images from object storage...
      📥 Found 8 images to download
      🔐 Downloading from OSS: a625057f-d84f-44a8-92fa-53b3b512edfd.jpg
      ✅ Downloaded: a625057f-d84f-44a8-92fa-53b3b512edfd.jpg (33785 bytes)
      🔐 Downloading from OSS: 366f3f26-01bb-4d88-a3ca-0c066fabfc2f.jpg
      ✅ Downloaded: 366f3f26-01bb-4d88-a3ca-0c066fabfc2f.jpg (54819 bytes)
      🔐 Downloading from OSS: 9999568b-0075-4cf1-bddc-c4708a0847e2.jpg
      ✅ Downloaded: 9999568b-0075-4cf1-bddc-c4708a0847e2.jpg (12612 bytes)
      🔐 Downloading from OSS: 7ab0e083-c22c-4f65-b98f-65acfd4e6dc0.jpg
      ✅ Downloaded: 7ab0e083-c22c-4f65-b98f-65acfd4e6dc0.jpg (30049 bytes)
      🔐 Downloading from OSS: 572ed653-a760-4c41-a5a0-79207219593a.jpg
      ✅ Downloaded: 572ed653-a760-4c41-a5a0-79207219593a.jpg (47093 bytes)
      🔐 Downloading from OSS: 6b2465d4-eba5-4ffd-b1fa-629edf4cb634.jpg
      ✅ Downloaded: 6b2465d4-eba5-4ffd-b1fa-629edf4cb634.jpg (20770 bytes)
      🔐 Downloading from OSS: aa1f1bfa-16c8-463b-99af-5dc4dfc4c994.jpg
      ✅ Downloaded: aa1f1bfa-16c8-463b-99af-5dc4dfc4c994.jpg (17916 bytes)
      🔐 Downloading from OSS: 7e8db6de-9533-4257-b767-1b2300dfb4ab.jpg
      ✅ Downloaded: 7e8db6de-9533-4257-b767-1b2300dfb4ab.jpg (21239 bytes)
   ✅ Downloaded 8 images
   ✅ Saved updated Markdown to: auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3/demo1.md
      Images directory: auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3/images

   ============================================================
   ✅ 完成！
   ============================================================

   📁 本地文件：
      • Markdown (含本地图片路径): auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3/demo1.md
      • 图片目录: auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3/images (8 张图片)
      • 原始 Markdown (含云端链接): auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3_demo1.md
      • 元数据: auto_upload_output/4c18cb2b-ff8c-4d14-b9a6-d2e80c64f9f3_metadata.json

   🖼️  图片存储：
      • 云端：所有图片已上传到对象存储（MinIO/COS/OSS）
      • 本地：已下载 8 张图片到本地
      • Markdown 图片链接：本地路径 (images/xxx.png)
      • 存储类型由服务端配置决定（STORAGE_TYPE 环境变量）

   📂 服务器本地文件（如需要）：

   📄 Markdown 内容预览（前 200 字符）：
   ------------------------------------------------------------
   (显示本地图片版本)
   # The response of flow duration curves to afforestation

   Patrick N.J. Lane $^{a,c,*}$ , Alice E. Best $^{b,c,d}$ , Klaus Hickel $^{b,c}$ , Lu Zhang $^{b,c}$

   $^{a}$ School of Forest and Ecosystem Stud
   ... (truncated)

   ```
