from fpdf import FPDF class PDF(FPDF): def header(self): self.set_fill_color(255, 255, 255) self.rect(0, 0, 210, 297, style='F') self.set_font('Helvetica', 'B', 12) self.set_text_color(237, 28, 36) # AMD Red self.cell(0, 10, 'ROCmPort AI: Agentic Migration Suite', border=0, new_x='LMARGIN', new_y='NEXT', align='R') self.ln(5) def footer(self): self.set_y(-15) self.set_font('Helvetica', 'I', 8) self.set_text_color(150, 150, 150) self.cell(0, 10, f'Page {self.page_no()}', border=0, new_x='LMARGIN', new_y='NEXT', align='C') pdf = PDF() pdf.set_auto_page_break(auto=True, margin=15) # Slide 1: Title pdf.add_page() pdf.ln(50) pdf.set_font('Helvetica', 'B', 36) pdf.set_text_color(0, 0, 0) pdf.cell(0, 20, 'ROCmPort AI', border=0, new_x='LMARGIN', new_y='NEXT', align='C') pdf.set_font('Helvetica', 'B', 16) pdf.set_text_color(237, 28, 36) pdf.cell(0, 10, 'CUDA-to-ROCm Migration powered by Qwen', border=0, new_x='LMARGIN', new_y='NEXT', align='C') pdf.ln(15) pdf.set_font('Helvetica', '', 14) pdf.set_text_color(100, 100, 100) pdf.cell(0, 10, 'Built for the AMD Developer Hackathon', border=0, new_x='LMARGIN', new_y='NEXT', align='C') # Slide 2: The Problem pdf.add_page() pdf.set_font('Helvetica', 'B', 20) pdf.set_text_color(237, 28, 36) pdf.cell(0, 15, '1. The Problem', border=0, new_x='LMARGIN', new_y='NEXT', align='L') pdf.set_font('Helvetica', '', 14) pdf.set_text_color(0, 0, 0) pdf.multi_cell(0, 8, 'Millions of lines of legacy AI code are locked into CUDA.\n\nManually porting PyTorch code to ROCm is tedious, error-prone, and acts as a massive bottleneck for enterprises adopting AMD hardware.') pdf.ln(10) pdf.set_font('Helvetica', 'B', 16) pdf.cell(0, 10, 'The Goal:', border=0, new_x='LMARGIN', new_y='NEXT', align='L') pdf.set_font('Helvetica', '', 14) pdf.multi_cell(0, 8, 'Drop the switching cost to AMD infrastructure to ZERO using open-source AI agents.') # Slide 3: Architecture Diagram (ASCII) pdf.add_page() pdf.set_font('Helvetica', 'B', 20) pdf.set_text_color(237, 28, 36) pdf.cell(0, 15, '2. System Architecture', border=0, new_x='LMARGIN', new_y='NEXT', align='L') pdf.set_font('Courier', '', 10) pdf.set_text_color(0, 0, 0) ascii_diagram = """ [ User Repository ] | v [ Gradio UI ] | v [ Pipeline ] | +-----------------+-----------------+ (Agentic Workflow) (Deterministic Fallback) | | [ CUDA Auditor ] [ Scanner ] | | [ ROCm Engineer ] [ Patcher ] | | [ Report Writer ] [ Artifacts ] | | (Qwen3 on MI300X) | | | +-----------------+-----------------+ v [ Final Migration Package ] """ pdf.set_fill_color(240, 240, 240) pdf.multi_cell(0, 5, ascii_diagram, border=1, align='C', fill=True) # Slide 4: Business Value & Solution pdf.add_page() pdf.set_font('Helvetica', 'B', 20) pdf.set_text_color(237, 28, 36) pdf.cell(0, 15, '3. Business Value & Implementation', border=0, new_x='LMARGIN', new_y='NEXT', align='L') pdf.set_font('Helvetica', '', 14) pdf.set_text_color(0, 0, 0) pdf.multi_cell(0, 8, 'ROCmPort AI completely automates the migration process using a 3-agent CrewAI pipeline:\n\n- CUDA Auditor: Scans ASTs for blocking hardware-specific code.\n- ROCm Engineer: Drafts the unified ROCm patch for PyTorch.\n- Report Writer: Packages the diff alongside a generated Dockerfile and Runbook.\n\nBusiness Impact:\nSaves hundreds of developer hours per repository, allowing immediate utilization of high-performance AMD hardware without manual rewrites.') # Slide 5: Hardware Benchmarks pdf.add_page() pdf.set_font('Helvetica', 'B', 20) pdf.set_text_color(237, 28, 36) pdf.cell(0, 15, '4. Hardware Proof (AMD MI300X)', border=0, new_x='LMARGIN', new_y='NEXT', align='L') pdf.set_font('Helvetica', '', 14) pdf.set_text_color(0, 0, 0) pdf.multi_cell(0, 8, 'We deployed the agent-generated patch directly onto the AMD Developer Cloud.') pdf.ln(5) benchmark_text = """ Hardware: AMD Instinct MI300X (192 GB HBM3) ROCm: ROCm 7.0 (via Quick Start PyTorch container) Model: Qwen/Qwen2.5-0.5B-Instruct Throughput tokens/sec: 67.7 P50 latency ms: 1884.49 Peak VRAM GB: 2.05 """ pdf.set_font('Courier', '', 12) pdf.set_fill_color(240, 240, 240) pdf.multi_cell(0, 7, benchmark_text, border=1, align='L', fill=True) pdf.ln(5) pdf.set_font('Helvetica', 'I', 12) pdf.multi_cell(0, 8, 'Result: Verified successful migration! Original PyTorch code was executed natively on AMD MI300X using the ROCm software stack.') # Slide 6: Links pdf.add_page() pdf.set_font('Helvetica', 'B', 20) pdf.set_text_color(237, 28, 36) pdf.cell(0, 15, '5. Live Deployment', border=0, new_x='LMARGIN', new_y='NEXT', align='L') pdf.set_font('Helvetica', '', 14) pdf.set_text_color(0, 0, 0) pdf.multi_cell(0, 10, 'GitHub Repository:\nhttps://github.com/nawangdorjay/rocmport-ai\n\nHugging Face Demo:\nhttps://huggingface.co/spaces/Nawangdorjay/rocmport-ai\n\nYouTube Pitch:\nhttps://youtu.be/3CDWDIOEwh0') pdf.output('ROCmPort_AI_Presentation.pdf')