mirror of
				https://github.com/allenai/olmocr.git
				synced 2025-11-04 03:56:16 +00:00 
			
		
		
		
	Update README + arg name
This commit is contained in:
		
							parent
							
								
									b34c3611e1
								
							
						
					
					
						commit
						261c722f56
					
				
							
								
								
									
										21
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								README.md
									
									
									
									
									
								
							@ -196,6 +196,20 @@ python -m olmocr.pipeline ./localworkspace --markdown --pdfs tests/gnarly_pdfs/*
 | 
			
		||||
 | 
			
		||||
With the addition of the `--markdown` flag, results will be stored as markdown files inside of `./localworkspace/markdown/`. 
 | 
			
		||||
 | 
			
		||||
### Using External vLLM Server
 | 
			
		||||
 | 
			
		||||
If you have a vLLM server already running elsewhere (or any inference platform implementing the relevant subset of the OpenAI API), you can point olmOCR to use it instead of spawning a local instance:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
# Use external vLLM server instead of local one
 | 
			
		||||
python -m olmocr.pipeline ./localworkspace --server http://remote-server:8000 --markdown --pdfs tests/gnarly_pdfs/*.pdf
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The served model name should be `olmocr`. An example vLLM launch command would be:
 | 
			
		||||
```bash
 | 
			
		||||
vllm serve allenai/olmOCR-7B-0825-FP8 --served-model-name olmocr --max-model-len 16384
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Viewing Results
 | 
			
		||||
 | 
			
		||||
The `./localworkspace/` workspace folder will then have both [Dolma](https://github.com/allenai/dolma) and markdown files (if using `--markdown`).
 | 
			
		||||
@ -271,7 +285,7 @@ python -m olmocr.pipeline ./localworkspace --markdown --pdfs olmocr-sample.pdf
 | 
			
		||||
python -m olmocr.pipeline --help
 | 
			
		||||
usage: pipeline.py [-h] [--pdfs [PDFS ...]] [--model MODEL] [--workspace_profile WORKSPACE_PROFILE] [--pdf_profile PDF_PROFILE] [--pages_per_group PAGES_PER_GROUP] [--max_page_retries MAX_PAGE_RETRIES] [--max_page_error_rate MAX_PAGE_ERROR_RATE] [--workers WORKERS]
 | 
			
		||||
                   [--apply_filter] [--stats] [--markdown] [--target_longest_image_dim TARGET_LONGEST_IMAGE_DIM] [--target_anchor_text_len TARGET_ANCHOR_TEXT_LEN] [--guided_decoding] [--gpu-memory-utilization GPU_MEMORY_UTILIZATION] [--max_model_len MAX_MODEL_LEN]
 | 
			
		||||
                   [--tensor-parallel-size TENSOR_PARALLEL_SIZE] [--data-parallel-size DATA_PARALLEL_SIZE] [--port PORT] [--beaker] [--beaker_workspace BEAKER_WORKSPACE] [--beaker_cluster BEAKER_CLUSTER] [--beaker_gpus BEAKER_GPUS] [--beaker_priority BEAKER_PRIORITY]
 | 
			
		||||
                   [--tensor-parallel-size TENSOR_PARALLEL_SIZE] [--data-parallel-size DATA_PARALLEL_SIZE] [--port PORT] [--server SERVER] [--beaker] [--beaker_workspace BEAKER_WORKSPACE] [--beaker_cluster BEAKER_CLUSTER] [--beaker_gpus BEAKER_GPUS] [--beaker_priority BEAKER_PRIORITY]
 | 
			
		||||
                   workspace
 | 
			
		||||
 | 
			
		||||
Manager for running millions of PDFs through a batch inference pipeline
 | 
			
		||||
@ -303,7 +317,7 @@ options:
 | 
			
		||||
                        Maximum amount of anchor text to use (characters), not used for new models
 | 
			
		||||
  --guided_decoding     Enable guided decoding for model YAML type outputs
 | 
			
		||||
 | 
			
		||||
VLLM Forwarded arguments:
 | 
			
		||||
VLLM arguments:
 | 
			
		||||
  --gpu-memory-utilization GPU_MEMORY_UTILIZATION
 | 
			
		||||
                        Fraction of VRAM vLLM may pre-allocate for KV-cache (passed through to vllm serve).
 | 
			
		||||
  --max_model_len MAX_MODEL_LEN
 | 
			
		||||
@ -313,6 +327,9 @@ VLLM Forwarded arguments:
 | 
			
		||||
  --data-parallel-size DATA_PARALLEL_SIZE, -dp DATA_PARALLEL_SIZE
 | 
			
		||||
                        Data parallel size for vLLM
 | 
			
		||||
  --port PORT           Port to use for the VLLM server
 | 
			
		||||
  --server SERVER       URL of external vLLM (or other compatible provider)
 | 
			
		||||
                        server (e.g., http://hostname:port). If provided,
 | 
			
		||||
                        skips spawning local vLLM instance
 | 
			
		||||
 | 
			
		||||
beaker/cluster execution:
 | 
			
		||||
  --beaker              Submit this job to beaker instead of running locally
 | 
			
		||||
 | 
			
		||||
@ -213,8 +213,8 @@ async def apost(url, json_data):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def process_page(args, worker_id: int, pdf_orig_path: str, pdf_local_path: str, page_num: int) -> PageResult:
 | 
			
		||||
    if args.external_vllm_url:
 | 
			
		||||
        COMPLETION_URL = f"{args.external_vllm_url.rstrip('/')}/v1/chat/completions"
 | 
			
		||||
    if args.server:
 | 
			
		||||
        COMPLETION_URL = f"{args.server.rstrip('/')}/v1/chat/completions"
 | 
			
		||||
    else:
 | 
			
		||||
        COMPLETION_URL = f"http://localhost:{BASE_SERVER_PORT}/v1/chat/completions"
 | 
			
		||||
    MAX_RETRIES = args.max_page_retries
 | 
			
		||||
@ -736,8 +736,8 @@ async def vllm_server_host(model_name_or_path, args, semaphore, unknown_args=Non
 | 
			
		||||
async def vllm_server_ready(args):
 | 
			
		||||
    max_attempts = 300
 | 
			
		||||
    delay_sec = 1
 | 
			
		||||
    if args.external_vllm_url:
 | 
			
		||||
        url = f"{args.external_vllm_url.rstrip('/')}/v1/models"
 | 
			
		||||
    if args.server:
 | 
			
		||||
        url = f"{args.server.rstrip('/')}/v1/models"
 | 
			
		||||
    else:
 | 
			
		||||
        url = f"http://localhost:{BASE_SERVER_PORT}/v1/models"
 | 
			
		||||
 | 
			
		||||
@ -1076,7 +1076,7 @@ async def main():
 | 
			
		||||
    vllm_group.add_argument("--data-parallel-size", "-dp", type=int, default=1, help="Data parallel size for vLLM")
 | 
			
		||||
    vllm_group.add_argument("--port", type=int, default=30024, help="Port to use for the VLLM server")
 | 
			
		||||
    vllm_group.add_argument(
 | 
			
		||||
        "--external-vllm-url", type=str, help="URL of external vLLM server (e.g., http://hostname:port). If provided, skips spawning local vLLM instance"
 | 
			
		||||
        "--server", type=str, help="URL of external vLLM (or other compatible provider) server (e.g., http://hostname:port). If provided, skips spawning local vLLM instance"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # Beaker/job running stuff
 | 
			
		||||
@ -1216,14 +1216,14 @@ async def main():
 | 
			
		||||
 | 
			
		||||
    # If you get this far, then you are doing inference and need a GPU
 | 
			
		||||
    # check_sglang_version()
 | 
			
		||||
    if not args.external_vllm_url:
 | 
			
		||||
    if not args.server:
 | 
			
		||||
        check_torch_gpu_available()
 | 
			
		||||
 | 
			
		||||
    logger.info(f"Starting pipeline with PID {os.getpid()}")
 | 
			
		||||
 | 
			
		||||
    # Download the model before you do anything else
 | 
			
		||||
    if args.external_vllm_url:
 | 
			
		||||
        logger.info(f"Using external vLLM server at {args.external_vllm_url}")
 | 
			
		||||
    if args.server:
 | 
			
		||||
        logger.info(f"Using external server at {args.server}")
 | 
			
		||||
        model_name_or_path = None
 | 
			
		||||
    else:
 | 
			
		||||
        model_name_or_path = await download_model(args.model)
 | 
			
		||||
@ -1242,7 +1242,7 @@ async def main():
 | 
			
		||||
 | 
			
		||||
    # Start local vLLM instance if not using external one
 | 
			
		||||
    vllm_server = None
 | 
			
		||||
    if not args.external_vllm_url:
 | 
			
		||||
    if not args.server:
 | 
			
		||||
        vllm_server = asyncio.create_task(vllm_server_host(model_name_or_path, args, semaphore, unknown_args))
 | 
			
		||||
 | 
			
		||||
    await vllm_server_ready(args)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user