ข้ามไปยังเนื้อหา
getnextpdf.com

Pro รุ่น

Accelerator

Accelerator ถ่ายภาระการบีบอัดภาพใหม่แบบ batch การแยกวิเคราะห์ PDF และการฝังข้อความ ไปยัง CPU sidecar ที่อยู่ร่วมตำแหน่ง เมื่อ sidecar เข้าถึงไม่ได้ ทุกการดำเนินการจะถอยกลับไปใช้เส้นทาง PHP ภายในกระบวนการ ดังนั้นผู้เรียกใช้จึงสังเกตเห็นผลลัพธ์เดียวกันไม่ว่าทางใด

ความสามารถนี้จัดส่งใน NextPDF Pro ( nextpdf/pro ) และเปิดใช้งานด้วยซองสิทธิ์การใช้งานระดับชั้น Pro การติดตั้งที่ไม่มีสิทธิ์ดังกล่าวจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและขอรับสิทธิ์การใช้งาน

Accelerator ไม่มีแฟล็กต่อฟีเจอร์แยกต่างหาก เส้นทางที่เร่งความเร็วถูกเลือกในขณะรันไทม์ด้วยการตรวจสอบความสามารถในการเข้าถึง sidecar ( ProAcceleratorProvider::isAvailable() ) เมื่อ sidecar เข้าถึงไม่ได้ เส้นทาง PHP ภายในกระบวนการจะรันแทน

Terminal window
composer require nextpdf/pro:^3

แพ็กเกจ Premium ติดตั้งโค้ด nextpdf/pro ภายใต้ namespace NextPDF\Pro\Accelerator เมทาแพ็กเกจ nextpdf/premium ยังติดตั้งความสามารถของ Enterprise ด้วย ตัว Accelerator เองเป็นฟีเจอร์ระดับชั้น Pro

ProAcceleratorProvider คือจุดเริ่มต้น มันสร้างบริการสี่อย่างแบบ lazy:

  • accelerated optimizer ที่ห่อหุ้ม PdfOptimizer ของ Pro และถ่ายภาระงานภาพแบบ batch ไปยัง sidecar
  • accelerated differ ที่ห่อหุ้ม PdfDiffer ของ Pro โดย sidecar ทำการแยกวิเคราะห์โครงสร้างแบบขนานในขณะที่อัลกอริทึม diff เองรันใน PHP
  • CPU embedding service ที่คืนค่าเวกเตอร์ 384 มิติโดยใช้โมเดล all-MiniLM-L6-v2 ONNX ที่โฮสต์โดย sidecar
  • CPU vector index ที่สร้างและค้นหาดัชนี HNSW ในหน่วยความจำที่ใช้ collection identifier เป็นคีย์

การออกแบบรักษาตรรกะโดเมนไว้ใน PHP sidecar ทำงานที่ขนานได้และผูกกับ CPU (การ transcode ภาพ การแยกวิเคราะห์หลายเอกสาร การอนุมาน ONNX การค้นหาเวกเตอร์) แต่ละเส้นทางที่เร่งความเร็วมี PHP fallback แบบ deterministic ที่ผลิตผลลัพธ์ที่เทียบเท่ากัน

การตัดสินใจที่รับน้ำหนักคือความถูกต้องไม่เคยขึ้นอยู่กับ sidecar ตรรกะโดเมนอยู่ใน PHP sidecar ทำเพียงงานที่ขนานได้และผูกกับ CPU เท่านั้น optimizer และ differ ( AcceleratedOptimizer, AcceleratedDiffer ) รักษา PHP fallback แบบ deterministic ไว้ ดังนั้นการขาด sidecar เปลี่ยนเวลา ไม่ใช่ผลลัพธ์ มีเพียงสองการดำเนินการที่ไม่มีสิ่งเทียบเท่าใน PHP — CpuEmbeddingService และ CpuVectorIndex — ที่ล้มเหลวแบบปิด แทนที่จะลดระดับลง คำตอบที่ผิดแบบเงียบ ๆ ตรงนั้นจะแย่กว่าข้อผิดพลาดที่ชัดเจน การแยกดังกล่าวทำให้ throughput ปรับขนาดตามคอร์ของ sidecar ในขณะที่ผู้เรียกใช้คงเส้นทางโค้ดเดียวและขอบเขตความเชื่อถือเดียว

พื้นหลังการออกแบบ: การสร้างเอกสารปริมาณมาก

  • ProAcceleratorProvider::isAvailable() คืนค่าว่า sidecar ตอบสนองหรือไม่ ผู้เรียกใช้สามารถแยกสาขาตามนี้ได้ แต่ไม่จำเป็นต้องทำ คือ optimizer และ differ จะถอยกลับโดยอัตโนมัติ
  • embedding()->embed() คืนค่าเวกเตอร์ 384 องค์ประกอบหนึ่งตัว batchEmbed() คืนค่าเวกเตอร์หนึ่งตัวต่ออินพุตและปฏิเสธรายการอินพุตที่ว่างเปล่าด้วย InvalidArgumentException
  • vectorIndex($collectionId)->build() กำหนดให้ vectors และ ids ต้องมีความยาวเท่ากันและถืออินพุตที่ว่างเปล่าเป็น no-op
  • vectorIndex()->search($queryVector, $topK) คืนค่าผลลัพธ์ที่จัดอันดับ delete() ไม่รองรับสำหรับดัชนี HNSW และปฏิเสธการเรียก — ผู้เรียกใช้สร้างดัชนีใหม่แทน
  • บริการ embedding และ vector index ต้องการ sidecar มันยกข้อผิดพลาด “not available” แทนที่จะลดระดับลงอย่างเงียบ ๆ เพราะไม่มีสิ่งเทียบเท่าใน PHP สำหรับการอนุมาน ONNX หรือการค้นหา HNSW
  • optimizer และ differ ไม่เคยยกข้อผิดพลาดเมื่อ sidecar ล้มเหลว มันลดระดับลงเป็นเส้นทาง PHP อย่างโปร่งใส

ต่อไปนี้สะท้อน public API ที่บันทึกไว้ ( ProAcceleratorProvider ) repository ไม่ได้มาพร้อมตัวอย่างที่รันได้สำหรับโมดูลนี้

use NextPDF\Pro\Accelerator\ProAcceleratorProvider;
$provider = new ProAcceleratorProvider($spectrumClient);
$result = $provider->optimizer()->optimizeBatch([
'invoice-1' => $pdfBytesA,
'invoice-2' => $pdfBytesB,
]);
foreach ($result->getItems() as $item) {
// Per-document optimization outcome.
}
use NextPDF\Pro\Accelerator\ProAcceleratorProvider;
$provider = new ProAcceleratorProvider($spectrumClient);
if ($provider->isAvailable()) {
$index = $provider->vectorIndex('contracts');
$index->build($vectors, $ids);
$hits = $index->search($queryVector, topK: 10);
} else {
// No PHP equivalent for HNSW search: route to your own retrieval path
// or surface a degraded-capability message.
}

ต่อสาย ProAcceleratorProvider ผ่าน container ของคุณเป็น singleton เพื่อให้อินสแตนซ์ของ optimizer และ differ ถูกนำกลับมาใช้ซ้ำ ให้ถือว่าการเรียก embedding และ vector-index ต้องการ sidecar

  • vector index อยู่ในหน่วยความจำของกระบวนการ sidecar และใช้ collection identifier เป็นคีย์ การรีสตาร์ท sidecar ล้างดัชนีทั้งหมด ให้สร้างใหม่หลังการรีสตาร์ท
  • count() บน vector index คืนค่า 0 เมื่อ sidecar เข้าถึงไม่ได้ แทนที่จะยกข้อผิดพลาด
  • การเร่งความเร็วของ optimizer และ differ เป็นแบบ best-effort ข้อผิดพลาดของ sidecar กลางคันทำให้เกิดการถอยกลับอย่างเงียบสำหรับการเรียกนั้น ดังนั้นเวลา — ไม่ใช่ความถูกต้อง — จึงต่างกัน

การเร่งความเร็วมุ่งเป้าไปที่งาน batch ที่ผูกกับ CPU คือ การ transcode ภาพแบบขนาน การแยกวิเคราะห์หลายเอกสาร และการค้นหาเวกเตอร์ NextPDF ไม่ได้เผยแพร่ตัวคูณ throughput ที่ตายตัวในที่นี้ การเพิ่มขึ้นขึ้นอยู่กับส่วนผสมของเอกสาร ความหนาแน่นของภาพ จำนวนคอร์ของ sidecar และขนาด batch ให้วัดในสภาพแวดล้อมของคุณก่อนพึ่งพาตัวเลขที่เจาะจง PHP fallback เป็นแบบ single-threaded ตามการออกแบบ

โมดูลนี้ส่งเอกสารและเวกเตอร์ไปยัง sidecar ที่อยู่ร่วมตำแหน่งผ่านการขนส่งที่กำหนดค่าไว้ ให้ถือ sidecar เป็นส่วนหนึ่งของขอบเขตความเชื่อถือของคุณและปรับใช้บน host เดียวกันหรือเซกเมนต์เครือข่ายส่วนตัว โมดูลตรวจสอบขนาดและรูปร่างของอินพุตก่อนการ dispatch มันไม่บันทึกเนื้อหาเอกสาร

โมดูลนี้ไม่ดำเนินงานความสอดคล้องของรูปแบบเอง มันมอบหมายการ optimize และ diff ให้กับโมดูล Optimizer และ Diff ของ Pro ดูโมดูลเหล่านั้นสำหรับการอ้างอิง ISO 32000-2 หลักฐานความสอดคล้องสำหรับหน้านี้มาจากสัญญาคลาสสาธารณะที่บันทึกไว้และ unit test ของมัน คลังข้อมูล RAG ไม่พร้อมใช้งานในเวลาเขียน ดังนั้นจึงไม่มีการอ้างตัวระบุข้อภายนอกในที่นี้

Enterprise ไม่เปลี่ยนพฤติกรรมของ Accelerator Enterprise เพิ่มฟีเจอร์ระดับชั้นสูงกว่าด้านการปฏิบัติตามข้อกำหนด การเก็บถาวร และวงจรชีวิตลายเซ็นที่บันทึกไว้ที่อื่น สิ่งเหล่านั้นอยู่นอกขอบเขตของโมดูลนี้และไม่จำเป็นต้องใช้ Accelerator

หากไม่มี Pro ให้ใช้การ optimize และ diff ภายในกระบวนการของ NextPDF Core เส้นทางที่เร่งความเร็วในโมดูลนี้ลดลงเป็นพฤติกรรม PHP เดียวกันเมื่อไม่มี sidecar

หน้านี้อธิบายเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว public API ที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้าของ ticket อยู่นอกขอบเขต