From a035ffb66026d9cccfb02831f3f40bf4deea7fab Mon Sep 17 00:00:00 2001 From: Conner Swann <2635475+yourbuddyconner@users.noreply.github.com> Date: Sat, 18 Jan 2025 10:25:00 -0800 Subject: [PATCH 1/2] revert the explicit cuda prover, ProverClient does this --- workspaces/base_files/sp1/host | 56 ++++++----------------------- workspaces/sp1/script/src/main.rs | 60 ++++++------------------------- 2 files changed, 22 insertions(+), 94 deletions(-) diff --git a/workspaces/base_files/sp1/host b/workspaces/base_files/sp1/host index 8f95c02..45d1465 100644 --- a/workspaces/base_files/sp1/host +++ b/workspaces/base_files/sp1/host @@ -3,17 +3,6 @@ mod metrics; use metrics::{MetricsCollector, SP1Metrics}; use tracing::{error, info}; -use sp1_core_executor::SP1Context; - -// use sp1_core_machine::io::SP1Stdin; -use sp1_prover::{components::DefaultProverComponents, utils::get_cycles, SP1Prover}; - -#[cfg(feature = "cuda")] -use sp1_cuda::SP1CudaProver; - -#[cfg(not(feature = "cuda"))] -use sp1_stark::SP1ProverOpts; - /// The ELF (executable and linkable format) file for the Succinct RISC-V zkVM. /// /// This file is generated by running `cargo prove build` inside the `program` directory. @@ -34,14 +23,8 @@ fn main() { // INPUT // - #[cfg(feature = "cuda")] - let server = SP1CudaProver::new().expect("Failed to initialize CUDA prover"); - let client = ProverClient::new(); - let prover = SP1Prover::::new(); - - // Setup the prover - let (pk, vk) = prover.setup(METHOD_ELF); + let (pk, vk) = client.setup(METHOD_ELF); // First run executor to get cycle count let (_, report) = client.execute(METHOD_ELF, stdin.clone()).run().unwrap(); @@ -50,50 +33,30 @@ fn main() { // Number of segments is the number of cycle tracking entries metrics.num_segments = report.cycle_tracker.len(); - // Setup the prover options. - #[cfg(not(feature = "cuda"))] - let opts = SP1ProverOpts::default(); - + // Generate uncompressed proof core_timer.start_timing(); - // Set as mutable to allow for template code to access it if needed - // Generate uncompressed proof (CPU) - #[cfg(not(feature = "cuda"))] let mut proof = client.prove(&pk, stdin.clone()).run().unwrap(); - - // Generate the core proof (CUDA). - #[cfg(feature = "cuda")] - let proof = server.prove_core(&pk, &stdin.clone()).unwrap(); - metrics.core_prove_duration = core_timer.elapsed().unwrap(); // Get uncompressed proof size let core_bytes = bincode::serialize(&proof).unwrap(); metrics.core_proof_size = core_bytes.len(); - // Save public values before moving proof - let public_values = proof.public_values.clone(); - // Verify uncompressed proof core_timer.start_timing(); - prover - .verify(&proof.proof, &vk) + client + .verify(&proof, &vk) .expect("Failed to verify uncompressed proof"); metrics.core_verify_duration = core_timer.elapsed().unwrap(); // Generate compressed proof compress_timer.start_timing(); - - #[cfg(not(feature = "cuda"))] let compressed = client .prove(&pk, stdin) .compressed() // Enable compression .run() .unwrap(); - - #[cfg(feature = "cuda")] - let compressed = server.compress(&vk, proof, vec![]).unwrap(); - metrics.compress_prove_duration = compress_timer.elapsed().unwrap(); // Get compressed proof size @@ -102,8 +65,8 @@ fn main() { // Verify compressed proof compress_timer.start_timing(); - prover - .verify_compressed(&compressed, &vk) + client + .verify(&compressed, &vk) .expect("Failed to verify compressed proof"); metrics.compress_verify_duration = compress_timer.elapsed().unwrap(); @@ -119,8 +82,11 @@ fn main() { .expect("Failed to save SP1 Proof file"); std::fs::write(current_dir.join("proof_data/sp1/sp1.elf"), METHOD_ELF) .expect("Failed to create SP1 elf file"); - std::fs::write(current_dir.join("proof_data/sp1/sp1.pub"), &public_values) - .expect("Failed to save SP1 public input"); + std::fs::write( + current_dir.join("proof_data/sp1/sp1.pub"), + &compressed.public_values, + ) + .expect("Failed to save SP1 public input"); // Save metrics info!("Attempting to save metrics..."); diff --git a/workspaces/sp1/script/src/main.rs b/workspaces/sp1/script/src/main.rs index bddcc4d..45d1465 100644 --- a/workspaces/sp1/script/src/main.rs +++ b/workspaces/sp1/script/src/main.rs @@ -3,17 +3,6 @@ mod metrics; use metrics::{MetricsCollector, SP1Metrics}; use tracing::{error, info}; -use sp1_core_executor::SP1Context; - -// use sp1_core_machine::io::SP1Stdin; -use sp1_prover::{components::DefaultProverComponents, utils::get_cycles, SP1Prover}; - -#[cfg(feature = "cuda")] -use sp1_cuda::SP1CudaProver; - -#[cfg(not(feature = "cuda"))] -use sp1_stark::SP1ProverOpts; - /// The ELF (executable and linkable format) file for the Succinct RISC-V zkVM. /// /// This file is generated by running `cargo prove build` inside the `program` directory. @@ -34,14 +23,8 @@ fn main() { // INPUT // - #[cfg(feature = "cuda")] - let server = SP1CudaProver::new().expect("Failed to initialize CUDA prover"); - let client = ProverClient::new(); - let prover = SP1Prover::::new(); - - // Setup the prover - let (pk, vk) = prover.setup(METHOD_ELF); + let (pk, vk) = client.setup(METHOD_ELF); // First run executor to get cycle count let (_, report) = client.execute(METHOD_ELF, stdin.clone()).run().unwrap(); @@ -50,54 +33,30 @@ fn main() { // Number of segments is the number of cycle tracking entries metrics.num_segments = report.cycle_tracker.len(); - // Setup the prover options. - #[cfg(not(feature = "cuda"))] - let opts = SP1ProverOpts::default(); - + // Generate uncompressed proof core_timer.start_timing(); - // Set as mutable to allow for template code to access it if needed - // Generate uncompressed proof (CPU) - #[cfg(not(feature = "cuda"))] let mut proof = client.prove(&pk, stdin.clone()).run().unwrap(); - - // Generate the core proof (CUDA). - #[cfg(feature = "cuda")] - let proof = server.prove_core(&pk, &stdin.clone()).unwrap(); - metrics.core_prove_duration = core_timer.elapsed().unwrap(); // Get uncompressed proof size let core_bytes = bincode::serialize(&proof).unwrap(); metrics.core_proof_size = core_bytes.len(); - // Save public values before moving proof - let public_values = proof.public_values.clone(); - // Verify uncompressed proof core_timer.start_timing(); - prover - .verify(&proof.proof, &vk) + client + .verify(&proof, &vk) .expect("Failed to verify uncompressed proof"); metrics.core_verify_duration = core_timer.elapsed().unwrap(); // Generate compressed proof compress_timer.start_timing(); - - #[cfg(not(feature = "cuda"))] let compressed = client .prove(&pk, stdin) .compressed() // Enable compression .run() - .unwrap() - .proof - .try_as_compressed() - .unwrap() .unwrap(); - - #[cfg(feature = "cuda")] - let compressed = server.compress(&vk, proof, vec![]).unwrap(); - metrics.compress_prove_duration = compress_timer.elapsed().unwrap(); // Get compressed proof size @@ -106,8 +65,8 @@ fn main() { // Verify compressed proof compress_timer.start_timing(); - prover - .verify_compressed(&compressed, &vk) + client + .verify(&compressed, &vk) .expect("Failed to verify compressed proof"); metrics.compress_verify_duration = compress_timer.elapsed().unwrap(); @@ -123,8 +82,11 @@ fn main() { .expect("Failed to save SP1 Proof file"); std::fs::write(current_dir.join("proof_data/sp1/sp1.elf"), METHOD_ELF) .expect("Failed to create SP1 elf file"); - std::fs::write(current_dir.join("proof_data/sp1/sp1.pub"), &public_values) - .expect("Failed to save SP1 public input"); + std::fs::write( + current_dir.join("proof_data/sp1/sp1.pub"), + &compressed.public_values, + ) + .expect("Failed to save SP1 public input"); // Save metrics info!("Attempting to save metrics..."); From 5b3c0503429816e199469035214f28cf4fa5a026 Mon Sep 17 00:00:00 2001 From: Conner Swann <2635475+yourbuddyconner@users.noreply.github.com> Date: Sat, 18 Jan 2025 11:25:10 -0800 Subject: [PATCH 2/2] cuda feature --- workspaces/base_files/sp1/cargo_host | 2 +- workspaces/sp1/script/Cargo.lock | 1 + workspaces/sp1/script/Cargo.toml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/workspaces/base_files/sp1/cargo_host b/workspaces/base_files/sp1/cargo_host index 2f0d6b2..89977c1 100644 --- a/workspaces/base_files/sp1/cargo_host +++ b/workspaces/base_files/sp1/cargo_host @@ -9,7 +9,7 @@ sp1-helper = "4.0.0" [features] default = [] -cuda = ["dep:sp1-cuda"] +cuda = ["dep:sp1-cuda", "sp1-sdk/cuda"] [dependencies] sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", tag = "v3.4.0" } diff --git a/workspaces/sp1/script/Cargo.lock b/workspaces/sp1/script/Cargo.lock index 4918315..dc4e9e1 100644 --- a/workspaces/sp1/script/Cargo.lock +++ b/workspaces/sp1/script/Cargo.lock @@ -5033,6 +5033,7 @@ dependencies = [ "serde", "sp1-core-executor", "sp1-core-machine", + "sp1-cuda", "sp1-primitives", "sp1-prover", "sp1-stark", diff --git a/workspaces/sp1/script/Cargo.toml b/workspaces/sp1/script/Cargo.toml index 56b7f58..5dab8a7 100644 --- a/workspaces/sp1/script/Cargo.toml +++ b/workspaces/sp1/script/Cargo.toml @@ -9,7 +9,7 @@ sp1-helper = "4.0.0" [features] default = [] -cuda = ["dep:sp1-cuda"] +cuda = ["dep:sp1-cuda", "sp1-sdk/cuda"] [dependencies] sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", tag = "v3.4.0" }