From ce70978e26283fec69539769f77877d16915cf33 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Thu, 29 Aug 2024 14:48:13 +0300 Subject: [PATCH 01/43] fix prover API --- core/node/external_proof_integration_api/src/processor.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/node/external_proof_integration_api/src/processor.rs b/core/node/external_proof_integration_api/src/processor.rs index 64748f5c2278..fbce8bbeb355 100644 --- a/core/node/external_proof_integration_api/src/processor.rs +++ b/core/node/external_proof_integration_api/src/processor.rs @@ -25,7 +25,7 @@ pub(crate) struct ProofGenerationDataResponse(ProofGenerationData); impl IntoResponse for ProofGenerationDataResponse { fn into_response(self) -> Response { let l1_batch_number = self.0.l1_batch_number; - let data = match bincode::serialize(&self.0) { + let data = match bincode::serialize(&self.0.witness_input_data) { Ok(data) => data, Err(err) => { return ProcessorError::Serialization(err).into_response(); @@ -171,7 +171,7 @@ impl Processor { return Err(ProcessorError::BatchNotReady(l1_batch_number)); } - self.proof_generation_data_for_existing_batch_internal(latest_available_batch) + self.proof_generation_data_for_existing_batch_internal(l1_batch_number) .await .map(ProofGenerationDataResponse) } From 640025a4b7cbe4f3291e510f555028a1c9b30f8f Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Thu, 29 Aug 2024 15:40:23 +0300 Subject: [PATCH 02/43] add docker compose --- docker-compose-oneshot-prover.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docker-compose-oneshot-prover.yml diff --git a/docker-compose-oneshot-prover.yml b/docker-compose-oneshot-prover.yml new file mode 100644 index 000000000000..7e631b463adb --- /dev/null +++ b/docker-compose-oneshot-prover.yml @@ -0,0 +1,25 @@ +version: '3.2' +services: + postgres: + image: "postgres:14" + command: postgres -c 'max_connections=200' + ports: + - 127.0.0.1:5432:5432 + volumes: + - type: bind + source: ./volumes/postgres + target: /var/lib/postgresql/data + environment: + # We bind only to 127.0.0.1, so setting insecure password is acceptable here + - POSTGRES_PASSWORD=notsecurepassword + witness-generator: + build: "./docker/witness-generator/Dockerfile" + comm + witness-vector-generator: + build: "./docker/witness-vector-generator/Dockerfile" + prover-gpu: + build: "./docker/prover-gpu-fri/Dockerfile" + proof-compressor: + build: "./docker/proof-fri-gpu-compressor/Dockerfile" + prover-job-monitor: + build: "./docker/prover-job-monitor/Dockerfile" \ No newline at end of file From 8c68b8b4dd073cae589a48f0f618ec26cf68fd29 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Mon, 2 Sep 2024 18:31:21 +0300 Subject: [PATCH 03/43] make requirements less tight, add option to download setup keys --- docker-compose-oneshot-prover.yml | 1 - zk_toolbox/crates/common/src/lib.rs | 5 +- zk_toolbox/crates/common/src/prerequisites.rs | 22 ++--- .../src/commands/prover/args/mod.rs | 1 + .../src/commands/prover/args/setup_keys.rs | 58 +++++++++++++ .../src/commands/prover/generate_sk.rs | 29 ------- .../zk_inception/src/commands/prover/mod.rs | 7 +- .../zk_inception/src/commands/prover/run.rs | 5 +- .../src/commands/prover/setup_keys.rs | 81 +++++++++++++++++++ .../crates/zk_inception/src/messages.rs | 4 + 10 files changed, 167 insertions(+), 46 deletions(-) create mode 100644 zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs delete mode 100644 zk_toolbox/crates/zk_inception/src/commands/prover/generate_sk.rs create mode 100644 zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs diff --git a/docker-compose-oneshot-prover.yml b/docker-compose-oneshot-prover.yml index 7e631b463adb..828f9546af00 100644 --- a/docker-compose-oneshot-prover.yml +++ b/docker-compose-oneshot-prover.yml @@ -14,7 +14,6 @@ services: - POSTGRES_PASSWORD=notsecurepassword witness-generator: build: "./docker/witness-generator/Dockerfile" - comm witness-vector-generator: build: "./docker/witness-vector-generator/Dockerfile" prover-gpu: diff --git a/zk_toolbox/crates/common/src/lib.rs b/zk_toolbox/crates/common/src/lib.rs index 2ab5c5f10e13..f52f30f0318c 100644 --- a/zk_toolbox/crates/common/src/lib.rs +++ b/zk_toolbox/crates/common/src/lib.rs @@ -13,6 +13,9 @@ pub mod git; pub mod server; pub mod wallets; -pub use prerequisites::{check_general_prerequisites, check_prover_prequisites}; +pub use prerequisites::{ + check_general_prerequisites, check_prerequisites, GCLOUD_PREREQUISITES, GPU_PREREQUISITES, + WGET_PREREQUISITES, +}; pub use prompt::{init_prompt_theme, Prompt, PromptConfirm, PromptSelect}; pub use term::{error, logger, spinner}; diff --git a/zk_toolbox/crates/common/src/prerequisites.rs b/zk_toolbox/crates/common/src/prerequisites.rs index 6c437302470d..7bdc3453dfc4 100644 --- a/zk_toolbox/crates/common/src/prerequisites.rs +++ b/zk_toolbox/crates/common/src/prerequisites.rs @@ -30,15 +30,7 @@ const DOCKER_COMPOSE_PREREQUISITE: Prerequisite = Prerequisite { download_link: "https://docs.docker.com/compose/install/", }; -const PROVER_PREREQUISITES: [Prerequisite; 5] = [ - Prerequisite { - name: "gcloud", - download_link: "https://cloud.google.com/sdk/docs/install", - }, - Prerequisite { - name: "wget", - download_link: "https://www.gnu.org/software/wget/", - }, +pub const GPU_PREREQUISITES: [Prerequisite; 3] = [ Prerequisite { name: "cmake", download_link: "https://cmake.org/download/", @@ -53,6 +45,16 @@ const PROVER_PREREQUISITES: [Prerequisite; 5] = [ }, // CUDA GPU driver ]; +pub const WGET_PREREQUISITES: [Prerequisite; 1] = [Prerequisite { + name: "wget", + download_link: "https://www.gnu.org/software/wget/", +}]; + +pub const GCLOUD_PREREQUISITES: [Prerequisite; 1] = [Prerequisite { + name: "gcloud", + download_link: "https://cloud.google.com/sdk/docs/install", +}]; + struct Prerequisite { name: &'static str, download_link: &'static str, @@ -66,7 +68,7 @@ pub fn check_prover_prequisites(shell: &Shell) { check_prerequisites(shell, &PROVER_PREREQUISITES, false); } -fn check_prerequisites(shell: &Shell, prerequisites: &[Prerequisite], check_compose: bool) { +pub fn check_prerequisites(shell: &Shell, prerequisites: &[Prerequisite], check_compose: bool) { let mut missing_prerequisites = vec![]; for prerequisite in prerequisites { diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/mod.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/mod.rs index 66d97d75094c..903ecdb81d91 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/mod.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/mod.rs @@ -1,3 +1,4 @@ pub mod init; pub mod init_bellman_cuda; pub mod run; +pub mod setup_keys; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs new file mode 100644 index 000000000000..4c9a0d901fae --- /dev/null +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs @@ -0,0 +1,58 @@ +use crate::commands::prover::args::run::{ + ProverComponent, WitnessGeneratorArgs, WitnessVectorGeneratorArgs, +}; +use crate::messages::{MSG_SETUP_KEYS_DOWNLOAD_HELP, MSG_SETUP_KEYS_REGION_PROMPT}; +use clap::{Parser, ValueEnum}; +use common::PromptSelect; +use strum::EnumIter; + +#[derive(Debug, Clone, Parser, Default)] +pub struct SetupKeysArgs { + #[clap(long)] + pub region: Option, + #[clap(long)] + pub approach: Option, +} + +#[derive(Debug, Clone)] +pub struct SetupKeysArgsFinal { + pub region: Option, + pub approach: SetupKeysApproach, +} + +#[derive(Debug, Clone, ValueEnum, strum::EnumString, EnumIter, PartialEq, Eq, strum::Display)] +pub(crate) enum SetupKeysApproach { + Download, + Generate, +} + +#[derive(Debug, Clone, ValueEnum, strum::EnumString, EnumIter, PartialEq, Eq, strum::Display)] +pub(crate) enum Region { + US, + EUROPE, + ASIA, +} + +impl SetupKeysArgs { + pub fn fill_values_with_prompt(self) -> SetupKeysArgsFinal { + let approach = self.approach.unwrap_or_else(|| { + PromptSelect::new(MSG_SETUP_KEYS_DOWNLOAD_HELP, SetupKeysApproach::iter()).ask() + }); + + if approach == SetupKeysApproach::Download { + let region = self.region.unwrap_or_else(|| { + PromptSelect::new(MSG_SETUP_KEYS_REGION_PROMPT, Region::iter()).ask() + }); + + SetupKeysArgsFinal { + region: Some(region), + approach, + } + } else { + SetupKeysArgsFinal { + region: None, + approach, + } + } + } +} diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/generate_sk.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/generate_sk.rs deleted file mode 100644 index 7f678470d178..000000000000 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/generate_sk.rs +++ /dev/null @@ -1,29 +0,0 @@ -use anyhow::Ok; -use common::{check_prover_prequisites, cmd::Cmd, logger, spinner::Spinner}; -use config::EcosystemConfig; -use xshell::{cmd, Shell}; - -use super::utils::get_link_to_prover; -use crate::messages::{MSG_GENERATING_SK_SPINNER, MSG_SK_GENERATED}; - -pub(crate) async fn run(shell: &Shell) -> anyhow::Result<()> { - check_prover_prequisites(shell); - - let ecosystem_config = EcosystemConfig::from_file(shell)?; - let link_to_prover = get_link_to_prover(&ecosystem_config); - shell.change_dir(&link_to_prover); - - let spinner = Spinner::new(MSG_GENERATING_SK_SPINNER); - let cmd = Cmd::new(cmd!( - shell, - "cargo run --features gpu --release --bin key_generator -- - generate-sk-gpu all --recompute-if-missing - --setup-path=crates/bin/vk_setup_data_generator_server_fri/data - --path={link_to_prover}/crates/bin/vk_setup_data_generator_server_fri/data" - )); - cmd.run()?; - spinner.finish(); - logger::outro(MSG_SK_GENERATED); - - Ok(()) -} diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs index 31c3a02e3806..8c730c1827dd 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs @@ -1,13 +1,14 @@ +use crate::commands::prover::args::setup_keys::SetupKeysArgs; use args::{init::ProverInitArgs, init_bellman_cuda::InitBellmanCudaArgs, run::ProverRunArgs}; use clap::Subcommand; use xshell::Shell; mod args; mod gcs; -mod generate_sk; mod init; mod init_bellman_cuda; mod run; +mod setup_keys; mod utils; #[derive(Subcommand, Debug)] @@ -16,7 +17,7 @@ pub enum ProverCommands { Init(Box), /// Generate setup keys #[command(alias = "sk")] - GenerateSK, + SetupKeys(SetupKeysArgs), /// Run prover Run(ProverRunArgs), /// Initialize bellman-cuda @@ -27,7 +28,7 @@ pub enum ProverCommands { pub(crate) async fn run(shell: &Shell, args: ProverCommands) -> anyhow::Result<()> { match args { ProverCommands::Init(args) => init::run(*args, shell).await, - ProverCommands::GenerateSK => generate_sk::run(shell).await, + ProverCommands::SetupKeys(args) => setup_keys::run(args, shell).await, ProverCommands::Run(args) => run::run(args, shell).await, ProverCommands::InitBellmanCuda(args) => init_bellman_cuda::run(shell, *args).await, } diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 056723836662..95524a8812dc 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,5 +1,5 @@ use anyhow::Context; -use common::{check_prover_prequisites, cmd::Cmd, logger}; +use common::{check_prerequisites, cmd::Cmd, logger, Prerequisite, GPU_PREREQUISITES}; use config::{ChainConfig, EcosystemConfig}; use xshell::{cmd, Shell}; @@ -20,7 +20,6 @@ use crate::messages::{ }; pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<()> { - check_prover_prequisites(shell); let args = args.fill_values_with_prompt()?; let ecosystem_config = EcosystemConfig::from_file(shell)?; let chain = ecosystem_config @@ -97,6 +96,7 @@ fn run_witness_vector_generator( } fn run_prover(shell: &Shell, chain: &ChainConfig) -> anyhow::Result<()> { + check_prerequisites(shell, &GPU_PREREQUISITES, false); logger::info(MSG_RUNNING_PROVER); let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -113,6 +113,7 @@ fn run_compressor( chain: &ChainConfig, ecosystem: &EcosystemConfig, ) -> anyhow::Result<()> { + check_prerequisites(shell, &GPU_PREREQUISITES, false); logger::info(MSG_RUNNING_COMPRESSOR); let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs new file mode 100644 index 000000000000..6ecd4b0f3238 --- /dev/null +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs @@ -0,0 +1,81 @@ +use crate::commands::prover::args::setup_keys::{Region, SetupKeysApproach, SetupKeysArgs}; +use anyhow::Ok; +use common::{ + check_prerequisites, cmd::Cmd, logger, spinner::Spinner, GCLOUD_PREREQUISITES, + GPU_PREREQUISITES, +}; +use config::EcosystemConfig; +use std::fs; +use xshell::{cmd, Shell}; + +use super::utils::get_link_to_prover; +use crate::messages::{MSG_GENERATING_SK_SPINNER, MSG_SK_GENERATED}; + +pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<()> { + let args = args.fill_values_with_prompt(); + + if args.approach == SetupKeysApproach::Generate { + check_prerequisites(shell, &GPU_PREREQUISITES, false); + + let ecosystem_config = EcosystemConfig::from_file(shell)?; + let link_to_prover = get_link_to_prover(&ecosystem_config); + shell.change_dir(&link_to_prover); + + let spinner = Spinner::new(MSG_GENERATING_SK_SPINNER); + let cmd = Cmd::new(cmd!( + shell, + "cargo run --features gpu --release --bin key_generator -- + generate-sk-gpu all --recompute-if-missing + --setup-path=crates/bin/vk_setup_data_generator_server_fri/data + --path={link_to_prover}/crates/bin/vk_setup_data_generator_server_fri/data" + )); + cmd.run()?; + spinner.finish(); + logger::outro(MSG_SK_GENERATED); + } else { + check_prerequisites(shell, &GCLOUD_PREREQUISITES, false); + + let ecosystem_config = EcosystemConfig::from_file(shell)?; + let link_to_setup_keys = get_link_to_prover(&ecosystem_config) + .join("crates/bin/vk_setup_data_generator_server_fri/data"); + let path_to_keys_buckets = + get_link_to_prover(&ecosystem_config).join("setup-data-gpu-keys.json"); + + let region = args.region.expect("Region is not provided"); + + let file = fs::File::open(path_to_keys_buckets) + .expect("Could not find commitments file in zksync-era"); + let json: serde_json::Value = + serde_json::from_reader(file).expect("Could not parse commitments.json"); + + let bucket = match region { + Region::US => json + .get("us") + .expect("Could not find link to US bucket") + .to_string(), + Region::EUROPE => json + .get("europe") + .expect("Could not find link to Europe bucket") + .to_string(), + Region::ASIA => json + .get("asia") + .expect("Could not find link to Asia bucket") + .to_string(), + }; + + let spinner = Spinner::new(&format!( + "Downloading keys from bucket: {} to {:?}", + bucket, link_to_setup_keys + )); + + let cmd = Cmd::new(cmd!( + shell, + "gsutil -m rsync -r {bucket} {link_to_setup_keys}" + )); + cmd.run()?; + spinner.finish(); + logger::outro("Keys are downloaded"); + } + + Ok(()) +} diff --git a/zk_toolbox/crates/zk_inception/src/messages.rs b/zk_toolbox/crates/zk_inception/src/messages.rs index 9975627025ac..7038a5d8be4f 100644 --- a/zk_toolbox/crates/zk_inception/src/messages.rs +++ b/zk_toolbox/crates/zk_inception/src/messages.rs @@ -5,6 +5,10 @@ use ethers::{ utils::format_ether, }; +pub(super) const MSG_SETUP_KEYS_DOWNLOAD_HELP: &str = + "Do you want to download the setup keys or generate them"; +pub(super) const MSG_SETUP_KEYS_REGION_PROMPT: &str = + "From which region you want setup keys to be downloaded?"; /// Common messages pub(super) const MSG_SELECTED_CONFIG: &str = "Selected config"; pub(super) const MSG_CHAIN_NOT_INITIALIZED: &str = From 278c4c02a8488d2fa1c7b356debb80b293277f66 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:01:57 +0300 Subject: [PATCH 04/43] add option to download setup keys --- zk_toolbox/crates/common/src/prerequisites.rs | 6 +----- .../src/commands/prover/args/setup_keys.rs | 12 +++++------- .../zk_inception/src/commands/prover/init.rs | 3 +-- .../src/commands/prover/init_bellman_cuda.rs | 4 ++-- .../crates/zk_inception/src/commands/prover/mod.rs | 3 ++- .../crates/zk_inception/src/commands/prover/run.rs | 2 +- .../zk_inception/src/commands/prover/setup_keys.rs | 14 +++++++++----- 7 files changed, 21 insertions(+), 23 deletions(-) diff --git a/zk_toolbox/crates/common/src/prerequisites.rs b/zk_toolbox/crates/common/src/prerequisites.rs index 7bdc3453dfc4..87ec396d0e63 100644 --- a/zk_toolbox/crates/common/src/prerequisites.rs +++ b/zk_toolbox/crates/common/src/prerequisites.rs @@ -55,7 +55,7 @@ pub const GCLOUD_PREREQUISITES: [Prerequisite; 1] = [Prerequisite { download_link: "https://cloud.google.com/sdk/docs/install", }]; -struct Prerequisite { +pub struct Prerequisite { name: &'static str, download_link: &'static str, } @@ -64,10 +64,6 @@ pub fn check_general_prerequisites(shell: &Shell) { check_prerequisites(shell, &PREREQUISITES, true); } -pub fn check_prover_prequisites(shell: &Shell) { - check_prerequisites(shell, &PROVER_PREREQUISITES, false); -} - pub fn check_prerequisites(shell: &Shell, prerequisites: &[Prerequisite], check_compose: bool) { let mut missing_prerequisites = vec![]; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs index 4c9a0d901fae..91815e24e7a7 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs @@ -1,10 +1,8 @@ -use crate::commands::prover::args::run::{ - ProverComponent, WitnessGeneratorArgs, WitnessVectorGeneratorArgs, -}; -use crate::messages::{MSG_SETUP_KEYS_DOWNLOAD_HELP, MSG_SETUP_KEYS_REGION_PROMPT}; use clap::{Parser, ValueEnum}; use common::PromptSelect; -use strum::EnumIter; +use strum::{EnumIter, IntoEnumIterator}; + +use crate::messages::{MSG_SETUP_KEYS_DOWNLOAD_HELP, MSG_SETUP_KEYS_REGION_PROMPT}; #[derive(Debug, Clone, Parser, Default)] pub struct SetupKeysArgs { @@ -21,13 +19,13 @@ pub struct SetupKeysArgsFinal { } #[derive(Debug, Clone, ValueEnum, strum::EnumString, EnumIter, PartialEq, Eq, strum::Display)] -pub(crate) enum SetupKeysApproach { +pub enum SetupKeysApproach { Download, Generate, } #[derive(Debug, Clone, ValueEnum, strum::EnumString, EnumIter, PartialEq, Eq, strum::Display)] -pub(crate) enum Region { +pub enum Region { US, EUROPE, ASIA, diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs index 051fd26801c9..6f7fd4e62b94 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs @@ -2,7 +2,6 @@ use std::path::PathBuf; use anyhow::Context; use common::{ - check_prover_prequisites, cmd::Cmd, config::global_config, db::{drop_db_if_exists, init_db, migrate_db, DatabaseConfig}, @@ -34,7 +33,7 @@ use crate::{ }; pub(crate) async fn run(args: ProverInitArgs, shell: &Shell) -> anyhow::Result<()> { - check_prover_prequisites(shell); + // todo: check_prover_prequisites(shell); let ecosystem_config = EcosystemConfig::from_file(shell)?; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/init_bellman_cuda.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/init_bellman_cuda.rs index 75535587c42c..5ed1473a33f6 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/init_bellman_cuda.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/init_bellman_cuda.rs @@ -1,5 +1,5 @@ use anyhow::Context; -use common::{check_prover_prequisites, cmd::Cmd, git, logger, spinner::Spinner}; +use common::{check_prerequisites, cmd::Cmd, git, logger, spinner::Spinner, GPU_PREREQUISITES}; use config::{traits::SaveConfigWithBasePath, EcosystemConfig}; use xshell::{cmd, Shell}; @@ -13,7 +13,7 @@ use crate::{ }; pub(crate) async fn run(shell: &Shell, args: InitBellmanCudaArgs) -> anyhow::Result<()> { - check_prover_prequisites(shell); + check_prerequisites(shell, &GPU_PREREQUISITES, false); let mut ecosystem_config = EcosystemConfig::from_file(shell)?; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs index 8c730c1827dd..4fb90dcfd020 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/mod.rs @@ -1,8 +1,9 @@ -use crate::commands::prover::args::setup_keys::SetupKeysArgs; use args::{init::ProverInitArgs, init_bellman_cuda::InitBellmanCudaArgs, run::ProverRunArgs}; use clap::Subcommand; use xshell::Shell; +use crate::commands::prover::args::setup_keys::SetupKeysArgs; + mod args; mod gcs; mod init; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index dad3125fd5fa..a819c3322a89 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,5 +1,5 @@ use anyhow::Context; -use common::{check_prerequisites, cmd::Cmd, config::global_config, logger, Prerequisite, GPU_PREREQUISITES}; +use common::{check_prerequisites, cmd::Cmd, config::global_config, logger, GPU_PREREQUISITES}; use config::{ChainConfig, EcosystemConfig}; use xshell::{cmd, Shell}; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs index 6ecd4b0f3238..be1a7077ab52 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs @@ -1,15 +1,16 @@ -use crate::commands::prover::args::setup_keys::{Region, SetupKeysApproach, SetupKeysArgs}; use anyhow::Ok; use common::{ check_prerequisites, cmd::Cmd, logger, spinner::Spinner, GCLOUD_PREREQUISITES, GPU_PREREQUISITES, }; use config::EcosystemConfig; -use std::fs; use xshell::{cmd, Shell}; use super::utils::get_link_to_prover; -use crate::messages::{MSG_GENERATING_SK_SPINNER, MSG_SK_GENERATED}; +use crate::{ + commands::prover::args::setup_keys::{Region, SetupKeysApproach, SetupKeysArgs}, + messages::{MSG_GENERATING_SK_SPINNER, MSG_SK_GENERATED}, +}; pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<()> { let args = args.fill_values_with_prompt(); @@ -43,12 +44,12 @@ pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<() let region = args.region.expect("Region is not provided"); - let file = fs::File::open(path_to_keys_buckets) + let file = std::fs::File::open(path_to_keys_buckets) .expect("Could not find commitments file in zksync-era"); let json: serde_json::Value = serde_json::from_reader(file).expect("Could not parse commitments.json"); - let bucket = match region { + let bucket = &match region { Region::US => json .get("us") .expect("Could not find link to US bucket") @@ -63,6 +64,9 @@ pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<() .to_string(), }; + let len = bucket.len() - 2usize; + let bucket = &bucket[1..len]; + let spinner = Spinner::new(&format!( "Downloading keys from bucket: {} to {:?}", bucket, link_to_setup_keys From 2ff1d824b135b0098df84bc3f4d68a6feac480c4 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:13:10 +0300 Subject: [PATCH 05/43] update docs --- docker-compose-oneshot-prover.yml | 24 ------------------- zk_toolbox/crates/zk_inception/README.md | 18 ++++++++++---- .../src/commands/prover/args/setup_keys.rs | 21 +++++++--------- .../src/commands/prover/setup_keys.rs | 4 ++-- .../crates/zk_inception/src/messages.rs | 2 +- 5 files changed, 26 insertions(+), 43 deletions(-) delete mode 100644 docker-compose-oneshot-prover.yml diff --git a/docker-compose-oneshot-prover.yml b/docker-compose-oneshot-prover.yml deleted file mode 100644 index 828f9546af00..000000000000 --- a/docker-compose-oneshot-prover.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '3.2' -services: - postgres: - image: "postgres:14" - command: postgres -c 'max_connections=200' - ports: - - 127.0.0.1:5432:5432 - volumes: - - type: bind - source: ./volumes/postgres - target: /var/lib/postgresql/data - environment: - # We bind only to 127.0.0.1, so setting insecure password is acceptable here - - POSTGRES_PASSWORD=notsecurepassword - witness-generator: - build: "./docker/witness-generator/Dockerfile" - witness-vector-generator: - build: "./docker/witness-vector-generator/Dockerfile" - prover-gpu: - build: "./docker/prover-gpu-fri/Dockerfile" - proof-compressor: - build: "./docker/proof-fri-gpu-compressor/Dockerfile" - prover-job-monitor: - build: "./docker/prover-job-monitor/Dockerfile" \ No newline at end of file diff --git a/zk_toolbox/crates/zk_inception/README.md b/zk_toolbox/crates/zk_inception/README.md index 037a7e3fc925..25eeff40247b 100644 --- a/zk_toolbox/crates/zk_inception/README.md +++ b/zk_toolbox/crates/zk_inception/README.md @@ -21,7 +21,7 @@ This document contains the help content for the `zk_inception` command-line prog - [`zk_inception chain update-token-multiplier-setter`↴](#zk_inception-chain-update-token-multiplier-setter) - [`zk_inception prover`↴](#zk_inception-prover) - [`zk_inception prover init`↴](#zk_inception-prover-init) -- [`zk_inception prover generate-sk`↴](#zk_inception-prover-generate-sk) +- [`zk_inception prover setup-keys`↴](#zk_inception-prover-setup-keys) - [`zk_inception prover run`↴](#zk_inception-prover-run) - [`zk_inception prover init-bellman-cuda`↴](#zk_inception-prover-init-bellman-cuda) - [`zk_inception server`↴](#zk_inception-server) @@ -475,11 +475,21 @@ Initialize prover Possible values: `gcp`, `local` -## `zk_inception prover generate-sk` +## `zk_inception prover setup-keys` -Generate setup keys +Setup keys -**Usage:** `zk_inception prover generate-sk` +**Usage:** `zk_inception prover setup-keys` + +###### **Options:** + +- `--mode` + + Possible valuess: `download`, `generate` + +- `--region` + + Possible values: `asia`, `europe`, `us` ## `zk_inception prover run` diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs index 91815e24e7a7..ef9ee32639aa 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs @@ -9,17 +9,17 @@ pub struct SetupKeysArgs { #[clap(long)] pub region: Option, #[clap(long)] - pub approach: Option, + pub mode: Option, } #[derive(Debug, Clone)] pub struct SetupKeysArgsFinal { pub region: Option, - pub approach: SetupKeysApproach, + pub mode: Mode, } #[derive(Debug, Clone, ValueEnum, strum::EnumString, EnumIter, PartialEq, Eq, strum::Display)] -pub enum SetupKeysApproach { +pub enum Mode { Download, Generate, } @@ -33,24 +33,21 @@ pub enum Region { impl SetupKeysArgs { pub fn fill_values_with_prompt(self) -> SetupKeysArgsFinal { - let approach = self.approach.unwrap_or_else(|| { - PromptSelect::new(MSG_SETUP_KEYS_DOWNLOAD_HELP, SetupKeysApproach::iter()).ask() - }); + let mode = self + .mode + .unwrap_or_else(|| PromptSelect::new(MSG_SETUP_KEYS_DOWNLOAD_HELP, Mode::iter()).ask()); - if approach == SetupKeysApproach::Download { + if mode == Mode::Download { let region = self.region.unwrap_or_else(|| { PromptSelect::new(MSG_SETUP_KEYS_REGION_PROMPT, Region::iter()).ask() }); SetupKeysArgsFinal { region: Some(region), - approach, + mode, } } else { - SetupKeysArgsFinal { - region: None, - approach, - } + SetupKeysArgsFinal { region: None, mode } } } } diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs index be1a7077ab52..8973e4800054 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs @@ -8,14 +8,14 @@ use xshell::{cmd, Shell}; use super::utils::get_link_to_prover; use crate::{ - commands::prover::args::setup_keys::{Region, SetupKeysApproach, SetupKeysArgs}, + commands::prover::args::setup_keys::{Mode, Region, SetupKeysArgs}, messages::{MSG_GENERATING_SK_SPINNER, MSG_SK_GENERATED}, }; pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<()> { let args = args.fill_values_with_prompt(); - if args.approach == SetupKeysApproach::Generate { + if args.mode == Mode::Generate { check_prerequisites(shell, &GPU_PREREQUISITES, false); let ecosystem_config = EcosystemConfig::from_file(shell)?; diff --git a/zk_toolbox/crates/zk_inception/src/messages.rs b/zk_toolbox/crates/zk_inception/src/messages.rs index d04f82fcebfa..25933d39db30 100644 --- a/zk_toolbox/crates/zk_inception/src/messages.rs +++ b/zk_toolbox/crates/zk_inception/src/messages.rs @@ -6,7 +6,7 @@ use ethers::{ }; pub(super) const MSG_SETUP_KEYS_DOWNLOAD_HELP: &str = - "Do you want to download the setup keys or generate them"; + "Do you want to download the setup keys or generate them?"; pub(super) const MSG_SETUP_KEYS_REGION_PROMPT: &str = "From which region you want setup keys to be downloaded?"; /// Common messages From 6791d0df76b152308c15f7e6f63c97a392c06220 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:20:26 +0300 Subject: [PATCH 06/43] update prerequisites check --- .../zk_inception/src/commands/prover/args/setup_keys.rs | 6 +++--- zk_toolbox/crates/zk_inception/src/commands/prover/gcs.rs | 4 +++- zk_toolbox/crates/zk_inception/src/commands/prover/init.rs | 5 +++-- .../crates/zk_inception/src/commands/prover/setup_keys.rs | 6 +++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs index ef9ee32639aa..4839c03eb429 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/setup_keys.rs @@ -26,9 +26,9 @@ pub enum Mode { #[derive(Debug, Clone, ValueEnum, strum::EnumString, EnumIter, PartialEq, Eq, strum::Display)] pub enum Region { - US, - EUROPE, - ASIA, + Us, + Europe, + Asia, } impl SetupKeysArgs { diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/gcs.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/gcs.rs index 0c76cb10f542..700209f5ffc8 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/gcs.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/gcs.rs @@ -1,4 +1,4 @@ -use common::{cmd::Cmd, logger, spinner::Spinner}; +use common::{check_prerequisites, cmd::Cmd, logger, spinner::Spinner, GCLOUD_PREREQUISITES}; use xshell::{cmd, Shell}; use zksync_config::{configs::object_store::ObjectStoreMode, ObjectStoreConfig}; @@ -14,6 +14,8 @@ pub(crate) fn create_gcs_bucket( shell: &Shell, config: ProofStorageGCSCreateBucket, ) -> anyhow::Result { + check_prerequisites(shell, &GCLOUD_PREREQUISITES, false); + let bucket_name = config.bucket_name; let location = config.location; let project_id = config.project_id; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs index 6f7fd4e62b94..7aadd04bf6b7 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs @@ -2,11 +2,13 @@ use std::path::PathBuf; use anyhow::Context; use common::{ + check_prerequisites, cmd::Cmd, config::global_config, db::{drop_db_if_exists, init_db, migrate_db, DatabaseConfig}, logger, spinner::Spinner, + WGET_PREREQUISITES, }; use config::{copy_configs, set_prover_database, traits::SaveConfigWithBasePath, EcosystemConfig}; use xshell::{cmd, Shell}; @@ -33,8 +35,6 @@ use crate::{ }; pub(crate) async fn run(args: ProverInitArgs, shell: &Shell) -> anyhow::Result<()> { - // todo: check_prover_prequisites(shell); - let ecosystem_config = EcosystemConfig::from_file(shell)?; let setup_key_path = get_default_setup_key_path(&ecosystem_config)?; @@ -114,6 +114,7 @@ fn download_setup_key( general_config: &GeneralConfig, path: &str, ) -> anyhow::Result<()> { + check_prerequisites(shell, &WGET_PREREQUISITES, false); let spinner = Spinner::new(MSG_DOWNLOADING_SETUP_KEY_SPINNER); let compressor_config: zksync_config::configs::FriProofCompressorConfig = general_config .proof_compressor_config diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs index 8973e4800054..c2c220ce99cf 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs @@ -50,15 +50,15 @@ pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<() serde_json::from_reader(file).expect("Could not parse commitments.json"); let bucket = &match region { - Region::US => json + Region::Us => json .get("us") .expect("Could not find link to US bucket") .to_string(), - Region::EUROPE => json + Region::Europe => json .get("europe") .expect("Could not find link to Europe bucket") .to_string(), - Region::ASIA => json + Region::Asia => json .get("asia") .expect("Could not find link to Asia bucket") .to_string(), From 1b60bdc93413f7648f5b2e69cfbd7f5585ac58c5 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Tue, 3 Sep 2024 10:11:46 +0300 Subject: [PATCH 07/43] update path to setup keys --- .../crates/zk_inception/src/commands/prover/setup_keys.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs index c2c220ce99cf..6bd9a73fd3da 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs @@ -27,8 +27,8 @@ pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<() shell, "cargo run --features gpu --release --bin key_generator -- generate-sk-gpu all --recompute-if-missing - --setup-path=crates/bin/vk_setup_data_generator_server_fri/data - --path={link_to_prover}/crates/bin/vk_setup_data_generator_server_fri/data" + --setup-path=data/keys + --path={link_to_prover}/data/keys" )); cmd.run()?; spinner.finish(); @@ -37,8 +37,7 @@ pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<() check_prerequisites(shell, &GCLOUD_PREREQUISITES, false); let ecosystem_config = EcosystemConfig::from_file(shell)?; - let link_to_setup_keys = get_link_to_prover(&ecosystem_config) - .join("crates/bin/vk_setup_data_generator_server_fri/data"); + let link_to_setup_keys = get_link_to_prover(&ecosystem_config).join("data/keys"); let path_to_keys_buckets = get_link_to_prover(&ecosystem_config).join("setup-data-gpu-keys.json"); From 8c91bf79e6cdeaca53378bb510ceb94b03e37b05 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Tue, 3 Sep 2024 14:48:20 +0300 Subject: [PATCH 08/43] address some of the comments --- .../zk_inception/src/commands/prover/setup_keys.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs index 6bd9a73fd3da..09d9f76a47cf 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/setup_keys.rs @@ -14,11 +14,10 @@ use crate::{ pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<()> { let args = args.fill_values_with_prompt(); + let ecosystem_config = EcosystemConfig::from_file(shell)?; if args.mode == Mode::Generate { check_prerequisites(shell, &GPU_PREREQUISITES, false); - - let ecosystem_config = EcosystemConfig::from_file(shell)?; let link_to_prover = get_link_to_prover(&ecosystem_config); shell.change_dir(&link_to_prover); @@ -36,17 +35,17 @@ pub(crate) async fn run(args: SetupKeysArgs, shell: &Shell) -> anyhow::Result<() } else { check_prerequisites(shell, &GCLOUD_PREREQUISITES, false); - let ecosystem_config = EcosystemConfig::from_file(shell)?; let link_to_setup_keys = get_link_to_prover(&ecosystem_config).join("data/keys"); let path_to_keys_buckets = get_link_to_prover(&ecosystem_config).join("setup-data-gpu-keys.json"); let region = args.region.expect("Region is not provided"); - let file = std::fs::File::open(path_to_keys_buckets) + let file = shell + .read_file(path_to_keys_buckets) .expect("Could not find commitments file in zksync-era"); let json: serde_json::Value = - serde_json::from_reader(file).expect("Could not parse commitments.json"); + serde_json::from_str(&file).expect("Could not parse commitments.json"); let bucket = &match region { Region::Us => json From 2e3760372646ea943222511cc072a01402044265 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:17:29 +0300 Subject: [PATCH 09/43] initial impl of running dockerized provers --- .../src/commands/prover/args/run.rs | 24 +- .../zk_inception/src/commands/prover/run.rs | 229 ++++++++++++++---- 2 files changed, 204 insertions(+), 49 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index 6bdd62c1d488..b192ff03cee2 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -12,6 +12,8 @@ pub struct ProverRunArgs { pub witness_generator_args: WitnessGeneratorArgs, #[clap(flatten)] pub witness_vector_generator_args: WitnessVectorGeneratorArgs, + #[clap(long)] + pub docker: Option, } #[derive( @@ -32,6 +34,19 @@ pub enum ProverComponent { ProverJobMonitor, } +impl ProverComponent { + pub fn image_name(&self) -> &'static str { + match self { + Self::Gateway => "matterlabs/prover-fri-gateway:latest", + Self::WitnessGenerator => "matterlabs/witness-generator:latest", + Self::WitnessVectorGenerator => "matterlabs/witness-vector-generator:latest", + Self::Prover => "matterlabs/prover-gpu-fri:latest", + Self::Compressor => "matterlabs/proof-fri-gpu-compressor:latest", + Self::ProverJobMonitor => "matterlabs/prover-job-monitor:latest", + } + } +} + #[derive(Debug, Clone, Parser, Default)] pub struct WitnessGeneratorArgs { #[clap(long)] @@ -77,7 +92,7 @@ impl WitnessVectorGeneratorArgs { } impl ProverRunArgs { - pub fn fill_values_with_prompt(&self) -> anyhow::Result { + pub fn fill_values_with_prompt(self) -> anyhow::Result { let component = self.component.unwrap_or_else(|| { PromptSelect::new(MSG_RUN_COMPONENT_PROMPT, ProverComponent::iter()).ask() }); @@ -90,10 +105,17 @@ impl ProverRunArgs { .witness_vector_generator_args .fill_values_with_prompt(component)?; + let docker = self.docker.unwrap_or_else(|| { + Prompt::new("Do you want to run Docker image for the component?") + .default("false") + .ask() + }); + Ok(ProverRunArgs { component: Some(component), witness_generator_args, witness_vector_generator_args, + docker: Some(docker), }) } } diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index a819c3322a89..d251a37872c1 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,4 +1,5 @@ -use anyhow::Context; +use anyhow::{anyhow, Context}; +use common::spinner::Spinner; use common::{check_prerequisites, cmd::Cmd, config::global_config, logger, GPU_PREREQUISITES}; use config::{ChainConfig, EcosystemConfig}; use xshell::{cmd, Shell}; @@ -30,40 +31,98 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() shell.change_dir(link_to_prover.clone()); match args.component { - Some(ProverComponent::Gateway) => run_gateway(shell, &chain)?, + Some(ProverComponent::Gateway) => { + let docker_image = if args.docker.unwrap_or(false) { + Some(ProverComponent::image_name(&ProverComponent::Gateway)) + } else { + None + }; + run_gateway(shell, &chain, docker_image)? + } Some(ProverComponent::WitnessGenerator) => { - run_witness_generator(shell, &chain, args.witness_generator_args)? + let docker_image = if args.docker.unwrap_or(false) { + Some(ProverComponent::image_name( + &ProverComponent::WitnessGenerator, + )) + } else { + None + }; + run_witness_generator(shell, &chain, args.witness_generator_args, docker_image)? } Some(ProverComponent::WitnessVectorGenerator) => { - run_witness_vector_generator(shell, &chain, args.witness_vector_generator_args)? + let docker_image = if args.docker.unwrap_or(false) { + Some(ProverComponent::image_name( + &ProverComponent::WitnessVectorGenerator, + )) + } else { + None + }; + run_witness_vector_generator( + shell, + &chain, + args.witness_vector_generator_args, + docker_image, + )? + } + Some(ProverComponent::Prover) => { + let docker_image = if args.docker.unwrap_or(false) { + Some(ProverComponent::image_name(&ProverComponent::Prover)) + } else { + None + }; + run_prover(shell, &chain, docker_image)? + } + Some(ProverComponent::Compressor) => { + let docker_image = if args.docker.unwrap_or(false) { + Some(ProverComponent::image_name(&ProverComponent::Compressor)) + } else { + None + }; + run_compressor(shell, &chain, &ecosystem_config, docker_image)? + } + Some(ProverComponent::ProverJobMonitor) => { + let docker_image = if args.docker.unwrap_or(false) { + Some(ProverComponent::image_name( + &ProverComponent::ProverJobMonitor, + )) + } else { + None + }; + run_prover_job_monitor(shell, &chain, docker_image)? } - Some(ProverComponent::Prover) => run_prover(shell, &chain)?, - Some(ProverComponent::Compressor) => run_compressor(shell, &chain, &ecosystem_config)?, - Some(ProverComponent::ProverJobMonitor) => run_prover_job_monitor(shell, &chain)?, None => anyhow::bail!(MSG_MISSING_COMPONENT_ERR), } Ok(()) } -fn run_gateway(shell: &Shell, chain: &ChainConfig) -> anyhow::Result<()> { +fn run_gateway( + shell: &Shell, + chain: &ChainConfig, + docker_image: Option<&str>, +) -> anyhow::Result<()> { logger::info(MSG_RUNNING_PROVER_GATEWAY); - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_prover_fri_gateway -- --config-path={config_path} --secrets-path={secrets_path}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_PROVER_GATEWAY_ERR) + if let Some(docker_image) = docker_image { + run_dockerized_component(shell, docker_image, "", MSG_RUNNING_PROVER_GATEWAY_ERR) + } else { + let config_path = chain.path_to_general_config(); + let secrets_path = chain.path_to_secrets_config(); + + let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_prover_fri_gateway -- --config-path={config_path} --secrets-path={secrets_path}")); + cmd = cmd.with_force_run(); + cmd.run().context(MSG_RUNNING_PROVER_GATEWAY_ERR) + } } fn run_witness_generator( shell: &Shell, chain: &ChainConfig, args: WitnessGeneratorArgs, + docker_image: Option<&str>, ) -> anyhow::Result<()> { logger::info(MSG_RUNNING_WITNESS_GENERATOR); - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); + let round = args.round.expect(MSG_WITNESS_GENERATOR_ROUND_ERR); let round_str = match round { @@ -75,68 +134,142 @@ fn run_witness_generator( WitnessGeneratorRound::Scheduler => "--round=scheduler", }; - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_witness_generator -- {round_str} --config-path={config_path} --secrets-path={secrets_path}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_WITNESS_GENERATOR_ERR) + if let Some(docker_image) = docker_image { + run_dockerized_component( + shell, + docker_image, + round_str, + MSG_RUNNING_PROVER_GATEWAY_ERR, + ) + } else { + let config_path = chain.path_to_general_config(); + let secrets_path = chain.path_to_secrets_config(); + + let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_witness_generator -- {round_str} --config-path={config_path} --secrets-path={secrets_path}")); + cmd = cmd.with_force_run(); + cmd.run().context(MSG_RUNNING_WITNESS_GENERATOR_ERR) + } } fn run_witness_vector_generator( shell: &Shell, chain: &ChainConfig, args: WitnessVectorGeneratorArgs, + docker_image: Option<&str>, ) -> anyhow::Result<()> { logger::info(MSG_RUNNING_WITNESS_VECTOR_GENERATOR); - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - let threads = args.threads.unwrap_or(1).to_string(); - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_witness_vector_generator -- --config-path={config_path} --secrets-path={secrets_path} --threads={threads}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR) + + if let Some(docker_image) = docker_image { + run_dockerized_component( + shell, + docker_image, + &format!("--threads={threads}"), + MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, + ) + } else { + let config_path = chain.path_to_general_config(); + let secrets_path = chain.path_to_secrets_config(); + + let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_witness_vector_generator -- --config-path={config_path} --secrets-path={secrets_path} --threads={threads}")); + cmd = cmd.with_force_run(); + cmd.run().context(MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR) + } } -fn run_prover(shell: &Shell, chain: &ChainConfig) -> anyhow::Result<()> { +fn run_prover( + shell: &Shell, + chain: &ChainConfig, + docker_image: Option<&str>, +) -> anyhow::Result<()> { check_prerequisites(shell, &GPU_PREREQUISITES, false); logger::info(MSG_RUNNING_PROVER); let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); - let mut cmd = Cmd::new( - cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path}"), - ); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_PROVER_ERR) + if let Some(docker_image) = docker_image { + run_dockerized_component(shell, docker_image, "", MSG_RUNNING_PROVER_ERR) + } else { + let mut cmd = Cmd::new( + cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path}"), + ); + cmd = cmd.with_force_run(); + cmd.run().context(MSG_RUNNING_PROVER_ERR) + } } fn run_compressor( shell: &Shell, chain: &ChainConfig, ecosystem: &EcosystemConfig, + docker_image: Option<&str>, ) -> anyhow::Result<()> { - check_prerequisites(shell, &GPU_PREREQUISITES, false); logger::info(MSG_RUNNING_COMPRESSOR); - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - shell.set_var( - "BELLMAN_CUDA_DIR", - ecosystem - .bellman_cuda_dir - .clone() - .expect(MSG_BELLMAN_CUDA_DIR_ERR), - ); + if let Some(docker_image) = docker_image { + run_dockerized_component(shell, docker_image, "", MSG_RUNNING_COMPRESSOR_ERR) + } else { + check_prerequisites(shell, &GPU_PREREQUISITES, false); + let config_path = chain.path_to_general_config(); + let secrets_path = chain.path_to_secrets_config(); - let mut cmd = Cmd::new(cmd!(shell, "cargo run --features gpu --release --bin zksync_proof_fri_compressor -- --config-path={config_path} --secrets-path={secrets_path}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_COMPRESSOR_ERR) + shell.set_var( + "BELLMAN_CUDA_DIR", + ecosystem + .bellman_cuda_dir + .clone() + .expect(MSG_BELLMAN_CUDA_DIR_ERR), + ); + + let mut cmd = Cmd::new(cmd!(shell, "cargo run --features gpu --release --bin zksync_proof_fri_compressor -- --config-path={config_path} --secrets-path={secrets_path}")); + cmd = cmd.with_force_run(); + cmd.run().context(MSG_RUNNING_COMPRESSOR_ERR) + } } -fn run_prover_job_monitor(shell: &Shell, chain: &ChainConfig) -> anyhow::Result<()> { +fn run_prover_job_monitor( + shell: &Shell, + chain: &ChainConfig, + docker_image: Option<&str>, +) -> anyhow::Result<()> { logger::info(MSG_RUNNING_PROVER_JOB_MONITOR); - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_prover_job_monitor -- --config-path={config_path} --secrets-path={secrets_path}")); + if let Some(docker_image) = docker_image { + run_dockerized_component(shell, docker_image, "", MSG_RUNNING_PROVER_JOB_MONITOR) + } else { + let config_path = chain.path_to_general_config(); + let secrets_path = chain.path_to_secrets_config(); + + let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_prover_job_monitor -- --config-path={config_path} --secrets-path={secrets_path}")); + cmd = cmd.with_force_run(); + cmd.run().context(MSG_RUNNING_PROVER_JOB_MONITOR) + } +} + +fn run_dockerized_component( + shell: &Shell, + image_name: &str, + additional_args: &str, + error: &str, +) -> anyhow::Result<()> { + let ecosystem_config = EcosystemConfig::from_file(shell)?; + let spinner = Spinner::new(&format!("Pulling image {}...", image_name)); + let pull_cmd = Cmd::new(cmd!(shell, "docker pull {image_name}")); + pull_cmd.run()?; + spinner.finish(); + + let path_to_configs = ecosystem_config + .load_chain(global_config().chain_name.clone()) + .expect(MSG_CHAIN_NOT_FOUND_ERR) + .configs + .clone(); + let path_to_artifacts = + get_link_to_prover(&EcosystemConfig::from_file(shell)?).join("/artifacts"); + + let mut cmd = Cmd::new(cmd!( + shell, + "docker run {image_name} --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" + )); cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_PROVER_JOB_MONITOR) + cmd.run().map_err(|err| anyhow!(err)) } From cc97103da35ad7046337dfb533352cd8810ccb93 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:27:20 +0300 Subject: [PATCH 10/43] update cmd --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index d251a37872c1..1b025dc65767 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -268,7 +268,7 @@ fn run_dockerized_component( let mut cmd = Cmd::new(cmd!( shell, - "docker run {image_name} --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" + "docker run --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" )); cmd = cmd.with_force_run(); cmd.run().map_err(|err| anyhow!(err)) From de46e44c65b397fc79d3aad5b12c40d39f521ae4 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:47:20 +0300 Subject: [PATCH 11/43] fix prerequisites --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 1b025dc65767..52d77756d302 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -182,7 +182,6 @@ fn run_prover( chain: &ChainConfig, docker_image: Option<&str>, ) -> anyhow::Result<()> { - check_prerequisites(shell, &GPU_PREREQUISITES, false); logger::info(MSG_RUNNING_PROVER); let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -190,6 +189,7 @@ fn run_prover( if let Some(docker_image) = docker_image { run_dockerized_component(shell, docker_image, "", MSG_RUNNING_PROVER_ERR) } else { + check_prerequisites(shell, &GPU_PREREQUISITES, false); let mut cmd = Cmd::new( cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path}"), ); From 1ece992ef4eefdd8816b421b4426c3449944c5b2 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:55:20 +0300 Subject: [PATCH 12/43] fix command --- .../crates/zk_inception/src/commands/prover/run.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 52d77756d302..127046205629 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -266,10 +266,17 @@ fn run_dockerized_component( let path_to_artifacts = get_link_to_prover(&EcosystemConfig::from_file(shell)?).join("/artifacts"); - let mut cmd = Cmd::new(cmd!( + let mut cmd = if additional_args.is_empty() { + Cmd::new(cmd!( + shell, + "docker run --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml" + )); + } else { + Cmd::new(cmd!( shell, "docker run --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" )); + }; cmd = cmd.with_force_run(); cmd.run().map_err(|err| anyhow!(err)) } From 2c58937582965cd3f27d1bd4d2a6581770d88765 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 13:56:00 +0300 Subject: [PATCH 13/43] fix command --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 127046205629..4aa8fc772c57 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -270,12 +270,12 @@ fn run_dockerized_component( Cmd::new(cmd!( shell, "docker run --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml" - )); + )) } else { Cmd::new(cmd!( shell, "docker run --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" - )); + )) }; cmd = cmd.with_force_run(); cmd.run().map_err(|err| anyhow!(err)) From df6d9558888946193963e8a765152cebac3ebf1d Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 14:40:56 +0300 Subject: [PATCH 14/43] make bellman-cuda optional in prover init --- .../src/commands/prover/args/init.rs | 18 +++++++++++++++--- .../zk_inception/src/commands/prover/init.rs | 4 +++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs index e8c9cf1888d5..9d4e53320132 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs @@ -188,7 +188,7 @@ pub struct ProverInitArgsFinal { pub proof_store: ProofStorageConfig, pub public_store: Option, pub setup_key_config: SetupKeyConfig, - pub bellman_cuda_config: InitBellmanCudaArgs, + pub bellman_cuda_config: Option, pub cloud_type: CloudConnectionMode, pub database_config: Option, } @@ -460,8 +460,20 @@ impl ProverInitArgs { }) } - fn fill_bellman_cuda_values_with_prompt(&self) -> anyhow::Result { - self.bellman_cuda_config.clone().fill_values_with_prompt() + fn fill_bellman_cuda_values_with_prompt(&self) -> anyhow::Result> { + let init_bellman_cuda = if self.bellman_cuda_config.bellman_cuda_dir.is_none() { + PromptConfirm::new("Do you want to setup bellman-cuda?(You can do it later by running `zk_inception prover init-bellman-cuda`)").default(false).ask() + } else { + true + }; + + if init_bellman_cuda { + Ok(Some( + self.bellman_cuda_config.clone().fill_values_with_prompt()?, + )) + } else { + Ok(None) + } } fn get_cloud_type_with_prompt(&self) -> CloudConnectionMode { diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs index 7aadd04bf6b7..3050a2778121 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/init.rs @@ -86,7 +86,9 @@ pub(crate) async fn run(args: ProverInitArgs, shell: &Shell) -> anyhow::Result<( chain_config.save_general_config(&general_config)?; - init_bellman_cuda(shell, args.bellman_cuda_config).await?; + if let Some(bellman_cuda_config) = args.bellman_cuda_config { + init_bellman_cuda(shell, bellman_cuda_config).await?; + } if let Some(prover_db) = &args.database_config { let spinner = Spinner::new(MSG_INITIALIZING_DATABASES_SPINNER); From 8188badabe98204adf097aad4bdd8f180322d9b1 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 15:44:46 +0300 Subject: [PATCH 15/43] fix path to artifacts --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 4aa8fc772c57..8ecc76827c59 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -2,6 +2,7 @@ use anyhow::{anyhow, Context}; use common::spinner::Spinner; use common::{check_prerequisites, cmd::Cmd, config::global_config, logger, GPU_PREREQUISITES}; use config::{ChainConfig, EcosystemConfig}; +use std::path::PathBuf; use xshell::{cmd, Shell}; use super::{ @@ -263,8 +264,9 @@ fn run_dockerized_component( .expect(MSG_CHAIN_NOT_FOUND_ERR) .configs .clone(); - let path_to_artifacts = - get_link_to_prover(&EcosystemConfig::from_file(shell)?).join("/artifacts"); + let mut path_to_artifacts = get_link_to_prover(&ecosystem_config).into_os_string(); + path_to_artifacts.push("/artifacts"); + let path_to_artifacts: PathBuf = path_to_artifacts.into(); let mut cmd = if additional_args.is_empty() { Cmd::new(cmd!( From 72503892dc8cef2dc9af164d37860ed19d8b9644 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:07:00 +0300 Subject: [PATCH 16/43] fix path to artifacts --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 8ecc76827c59..30271e90e808 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -271,12 +271,12 @@ fn run_dockerized_component( let mut cmd = if additional_args.is_empty() { Cmd::new(cmd!( shell, - "docker run --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml" + "docker run --net=host -v {path_to_artifacts}:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml" )) } else { Cmd::new(cmd!( shell, - "docker run --net=host -v {path_to_artifacts}:/zksync-era/prover/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" + "docker run --net=host -v {path_to_artifacts}:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" )) }; cmd = cmd.with_force_run(); From 33916448a848e6ed5cf11de7528baec31340ef21 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Thu, 5 Sep 2024 10:14:10 +0300 Subject: [PATCH 17/43] fmt --- .../crates/zk_inception/src/commands/prover/run.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index d873f0056b04..2d47459ba694 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,8 +1,11 @@ +use std::path::PathBuf; + use anyhow::{anyhow, Context}; -use common::spinner::Spinner; -use common::{check_prerequisites, cmd::Cmd, config::global_config, logger, GPU_PREREQUISITES}; +use common::{ + check_prerequisites, cmd::Cmd, config::global_config, logger, spinner::Spinner, + GPU_PREREQUISITES, +}; use config::{ChainConfig, EcosystemConfig}; -use std::path::PathBuf; use xshell::{cmd, Shell}; use super::{ From b11e0208dfd2087fb4df62f5c7590fdc37032787 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Thu, 5 Sep 2024 10:20:55 +0300 Subject: [PATCH 18/43] add using gpus for images, mount setup keys --- .../crates/zk_inception/src/commands/prover/run.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 2d47459ba694..b681cab34a30 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -256,7 +256,7 @@ fn run_dockerized_component( shell: &Shell, image_name: &str, additional_args: &str, - error: &str, + _error: &str, ) -> anyhow::Result<()> { let ecosystem_config = EcosystemConfig::from_file(shell)?; let spinner = Spinner::new(&format!("Pulling image {}...", image_name)); @@ -269,19 +269,17 @@ fn run_dockerized_component( .expect(MSG_CHAIN_NOT_FOUND_ERR) .configs .clone(); - let mut path_to_artifacts = get_link_to_prover(&ecosystem_config).into_os_string(); - path_to_artifacts.push("/artifacts"); - let path_to_artifacts: PathBuf = path_to_artifacts.into(); + let path_to_prover = get_link_to_prover(&ecosystem_config); let mut cmd = if additional_args.is_empty() { Cmd::new(cmd!( shell, - "docker run --net=host -v {path_to_artifacts}:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml" + "docker run --net=host --gpus=all -v {path_to_prover}/data/keys:/prover/data/keys -v {path_to_prover}/artifacts:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml" )) } else { Cmd::new(cmd!( shell, - "docker run --net=host -v {path_to_artifacts}:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" + "docker run --net=host --gpus=all -v {path_to_prover}/data/keys:/prover/data/keys -v {path_to_prover}/artifacts:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" )) }; cmd = cmd.with_force_run(); From 689b51f39a0494fa7b50bb1e453c5da35583f567 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Thu, 5 Sep 2024 10:47:47 +0300 Subject: [PATCH 19/43] add more logging --- .../crates/bin/prover_fri/src/gpu_prover_job_processor.rs | 7 +++++-- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs b/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs index 4b11353eac5c..0835c8ff4cbf 100644 --- a/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs +++ b/prover/crates/bin/prover_fri/src/gpu_prover_job_processor.rs @@ -181,8 +181,11 @@ pub mod gpu_prover { (), &worker, ) - .unwrap_or_else(|_| { - panic!("failed generating GPU proof for id: {}", prover_job.job_id) + .unwrap_or_else(|err| { + panic!( + "failed generating GPU proof for id: {}, error: {:?}", + prover_job.job_id, err + ) }); tracing::info!( "Successfully generated gpu proof for job {} took: {:?}", diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index b681cab34a30..264c0ffb3134 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,5 +1,3 @@ -use std::path::PathBuf; - use anyhow::{anyhow, Context}; use common::{ check_prerequisites, cmd::Cmd, config::global_config, logger, spinner::Spinner, From 47f511a1e84385a011f6b70da23e52184521d832 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:11:05 +0300 Subject: [PATCH 20/43] update some things --- .github/workflows/build-docker-from-tag.yml | 16 +-- docker/proof-fri-gpu-compressor/Dockerfile | 3 +- .../src/commands/prover/args/run.rs | 20 ++- .../zk_inception/src/commands/prover/run.rs | 114 ++++++++---------- 4 files changed, 75 insertions(+), 78 deletions(-) diff --git a/.github/workflows/build-docker-from-tag.yml b/.github/workflows/build-docker-from-tag.yml index cd222a6e43bb..791f44117477 100644 --- a/.github/workflows/build-docker-from-tag.yml +++ b/.github/workflows/build-docker-from-tag.yml @@ -23,7 +23,7 @@ concurrency: docker-build jobs: setup: name: Setup - runs-on: [ubuntu-latest] + runs-on: [ ubuntu-latest ] outputs: image_tag_suffix: ${{ steps.set.outputs.image_tag_suffix }} prover_fri_gpu_key_id: ${{ steps.extract-prover-fri-setup-key-ids.outputs.gpu_short_commit_sha }} @@ -48,7 +48,7 @@ jobs: build-push-core-images: name: Build and push image - needs: [setup] + needs: [ setup ] uses: ./.github/workflows/build-core-template.yml if: contains(github.ref_name, 'core') secrets: @@ -60,7 +60,7 @@ jobs: build-push-tee-prover-images: name: Build and push images - needs: [setup] + needs: [ setup ] uses: ./.github/workflows/build-tee-prover-template.yml if: contains(github.ref_name, 'core') secrets: @@ -72,7 +72,7 @@ jobs: build-push-contract-verifier: name: Build and push image - needs: [setup] + needs: [ setup ] uses: ./.github/workflows/build-contract-verifier-template.yml if: contains(github.ref_name, 'contract_verifier') secrets: @@ -83,20 +83,20 @@ jobs: build-push-prover-images: name: Build and push image - needs: [setup] + needs: [ setup ] uses: ./.github/workflows/build-prover-template.yml if: contains(github.ref_name, 'prover') with: image_tag_suffix: ${{ needs.setup.outputs.image_tag_suffix }} ERA_BELLMAN_CUDA_RELEASE: ${{ vars.ERA_BELLMAN_CUDA_RELEASE }} - CUDA_ARCH: "60;70;75;89" + CUDA_ARCH: "60;70;75;80;89" secrets: DOCKERHUB_USER: ${{ secrets.DOCKERHUB_USER }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} build-push-witness-generator-image-avx512: name: Build and push image - needs: [setup] + needs: [ setup ] uses: ./.github/workflows/build-witness-generator-template.yml if: contains(github.ref_name, 'prover') with: @@ -110,7 +110,7 @@ jobs: build-gar-prover-fri-gpu: name: Build GAR prover FRI GPU - needs: [setup, build-push-prover-images] + needs: [ setup, build-push-prover-images ] uses: ./.github/workflows/build-prover-fri-gpu-gar.yml if: contains(github.ref_name, 'prover') with: diff --git a/docker/proof-fri-gpu-compressor/Dockerfile b/docker/proof-fri-gpu-compressor/Dockerfile index a3d92d113cde..45f2ffa51b04 100644 --- a/docker/proof-fri-gpu-compressor/Dockerfile +++ b/docker/proof-fri-gpu-compressor/Dockerfile @@ -4,8 +4,7 @@ FROM nvidia/cuda:12.2.0-devel-ubuntu22.04 as builder ARG DEBIAN_FRONTEND=noninteractive ARG CUDA_ARCH=89 -ARG A100_CUDA_ARCH=80 -ENV CUDAARCHS=${CUDA_ARCH};${A100_CUDA_ARCH} +ENV CUDAARCHS=${CUDA_ARCH} RUN apt-get update && apt-get install -y curl clang openssl libssl-dev gcc g++ git \ pkg-config build-essential libclang-dev && \ diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index b192ff03cee2..e083d7d4b151 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -12,6 +12,8 @@ pub struct ProverRunArgs { pub witness_generator_args: WitnessGeneratorArgs, #[clap(flatten)] pub witness_vector_generator_args: WitnessVectorGeneratorArgs, + #[clap(flatten)] + pub fri_prover_args: FriProverRunArgs, #[clap(long)] pub docker: Option, } @@ -37,12 +39,12 @@ pub enum ProverComponent { impl ProverComponent { pub fn image_name(&self) -> &'static str { match self { - Self::Gateway => "matterlabs/prover-fri-gateway:latest", - Self::WitnessGenerator => "matterlabs/witness-generator:latest", - Self::WitnessVectorGenerator => "matterlabs/witness-vector-generator:latest", - Self::Prover => "matterlabs/prover-gpu-fri:latest", - Self::Compressor => "matterlabs/proof-fri-gpu-compressor:latest", - Self::ProverJobMonitor => "matterlabs/prover-job-monitor:latest", + Self::Gateway => "matterlabs/prover-fri-gateway:latest2.0", + Self::WitnessGenerator => "matterlabs/witness-generator:latest2.0", + Self::WitnessVectorGenerator => "matterlabs/witness-vector-generator:latest2.0", + Self::Prover => "matterlabs/prover-gpu-fri:latest2.0", + Self::Compressor => "matterlabs/proof-fri-gpu-compressor:latest2.0", + Self::ProverJobMonitor => "matterlabs/prover-job-monitor:latest2.0", } } } @@ -91,6 +93,11 @@ impl WitnessVectorGeneratorArgs { } } +#[derive(Debug, Clone, Parser, Default)] +pub struct FriProverRunArgs { + pub max_allocation: Option, +} + impl ProverRunArgs { pub fn fill_values_with_prompt(self) -> anyhow::Result { let component = self.component.unwrap_or_else(|| { @@ -115,6 +122,7 @@ impl ProverRunArgs { component: Some(component), witness_generator_args, witness_vector_generator_args, + fri_prover_args: self.fri_prover_args, docker: Some(docker), }) } diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 264c0ffb3134..1fd5166d4ae4 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,8 +1,10 @@ +use crate::commands::prover::args::run::FriProverRunArgs; use anyhow::{anyhow, Context}; use common::{ check_prerequisites, cmd::Cmd, config::global_config, logger, spinner::Spinner, GPU_PREREQUISITES, }; +use config::traits::SaveConfigWithBasePath; use config::{ChainConfig, EcosystemConfig}; use xshell::{cmd, Shell}; @@ -32,64 +34,26 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() let link_to_prover = get_link_to_prover(&ecosystem_config); shell.change_dir(link_to_prover.clone()); + let docker_image = args.component.map(|component| component.image_name()); + match args.component { - Some(ProverComponent::Gateway) => { - let docker_image = if args.docker.unwrap_or(false) { - Some(ProverComponent::image_name(&ProverComponent::Gateway)) - } else { - None - }; - run_gateway(shell, &chain, docker_image)? - } + Some(ProverComponent::Gateway) => run_gateway(shell, &chain, docker_image)?, Some(ProverComponent::WitnessGenerator) => { - let docker_image = if args.docker.unwrap_or(false) { - Some(ProverComponent::image_name( - &ProverComponent::WitnessGenerator, - )) - } else { - None - }; run_witness_generator(shell, &chain, args.witness_generator_args, docker_image)? } - Some(ProverComponent::WitnessVectorGenerator) => { - let docker_image = if args.docker.unwrap_or(false) { - Some(ProverComponent::image_name( - &ProverComponent::WitnessVectorGenerator, - )) - } else { - None - }; - run_witness_vector_generator( - shell, - &chain, - args.witness_vector_generator_args, - docker_image, - )? - } + Some(ProverComponent::WitnessVectorGenerator) => run_witness_vector_generator( + shell, + &chain, + args.witness_vector_generator_args, + docker_image, + )?, Some(ProverComponent::Prover) => { - let docker_image = if args.docker.unwrap_or(false) { - Some(ProverComponent::image_name(&ProverComponent::Prover)) - } else { - None - }; - run_prover(shell, &chain, docker_image)? + run_prover(shell, &chain, args.fri_prover_args, docker_image)? } Some(ProverComponent::Compressor) => { - let docker_image = if args.docker.unwrap_or(false) { - Some(ProverComponent::image_name(&ProverComponent::Compressor)) - } else { - None - }; run_compressor(shell, &chain, &ecosystem_config, docker_image)? } Some(ProverComponent::ProverJobMonitor) => { - let docker_image = if args.docker.unwrap_or(false) { - Some(ProverComponent::image_name( - &ProverComponent::ProverJobMonitor, - )) - } else { - None - }; run_prover_job_monitor(shell, &chain, docker_image)? } None => anyhow::bail!(MSG_MISSING_COMPONENT_ERR), @@ -106,7 +70,7 @@ fn run_gateway( logger::info(MSG_RUNNING_PROVER_GATEWAY); if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, "", MSG_RUNNING_PROVER_GATEWAY_ERR) + run_dockerized_component(shell, docker_image, "") } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -137,12 +101,7 @@ fn run_witness_generator( }; if let Some(docker_image) = docker_image { - run_dockerized_component( - shell, - docker_image, - round_str, - MSG_RUNNING_PROVER_GATEWAY_ERR, - ) + run_dockerized_component(shell, docker_image, round_str) } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -182,6 +141,7 @@ fn run_witness_vector_generator( fn run_prover( shell: &Shell, chain: &ChainConfig, + fri_prover_run_args: FriProverRunArgs, docker_image: Option<&str>, ) -> anyhow::Result<()> { check_prerequisites(shell, &GPU_PREREQUISITES, false); @@ -189,13 +149,27 @@ fn run_prover( let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); + let additional_args = if let Some(max_allocation) = fri_prover_run_args.max_allocation { + format!("--max-allocation={max_allocation}") + } else { + "".to_string() + }; + if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, "", MSG_RUNNING_PROVER_ERR) + change_setup_data_path(shell, "prover/data/keys")?; + run_dockerized_component(shell, docker_image, &additional_args) } else { + change_setup_data_path(shell, "data/keys")?; check_prerequisites(shell, &GPU_PREREQUISITES, false); - let mut cmd = Cmd::new( - cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path}"), - ); + let mut cmd = if additional_args.is_empty() { + Cmd::new( + cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path}"), + ) + } else { + Cmd::new( + cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path} {additional_args}"), + ) + }; cmd = cmd.with_force_run(); cmd.run().context(MSG_RUNNING_PROVER_ERR) } @@ -211,7 +185,7 @@ fn run_compressor( logger::info(MSG_RUNNING_COMPRESSOR); if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, "", MSG_RUNNING_COMPRESSOR_ERR) + run_dockerized_component(shell, docker_image, "") } else { check_prerequisites(shell, &GPU_PREREQUISITES, false); let config_path = chain.path_to_general_config(); @@ -239,7 +213,7 @@ fn run_prover_job_monitor( logger::info(MSG_RUNNING_PROVER_JOB_MONITOR); if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, "", MSG_RUNNING_PROVER_JOB_MONITOR) + run_dockerized_component(shell, docker_image, "") } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -254,7 +228,6 @@ fn run_dockerized_component( shell: &Shell, image_name: &str, additional_args: &str, - _error: &str, ) -> anyhow::Result<()> { let ecosystem_config = EcosystemConfig::from_file(shell)?; let spinner = Spinner::new(&format!("Pulling image {}...", image_name)); @@ -283,3 +256,20 @@ fn run_dockerized_component( cmd = cmd.with_force_run(); cmd.run().map_err(|err| anyhow!(err)) } + +fn change_setup_data_path(shell: &Shell, path: &str) -> anyhow::Result<()> { + let ecosystem_config = EcosystemConfig::from_file(shell).unwrap(); + let chain_config = ecosystem_config + .load_chain(global_config().chain_name.clone()) + .expect(MSG_CHAIN_NOT_FOUND_ERR); + + let mut general_config = chain_config.get_general_config()?; + + if let Some(prover_config) = general_config.prover_config.as_mut() { + prover_config.setup_data_path = path.to_string(); + } + + general_config.save_with_base_path(shell, chain_config.configs)?; + + Ok(()) +} From fe3974b858f80330dbb308cbf877a7c83d9ce96e Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:27:02 +0300 Subject: [PATCH 21/43] fmt --- .../zk_inception/src/commands/prover/run.rs | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 1fd5166d4ae4..83d408533e55 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,11 +1,9 @@ -use crate::commands::prover::args::run::FriProverRunArgs; use anyhow::{anyhow, Context}; use common::{ check_prerequisites, cmd::Cmd, config::global_config, logger, spinner::Spinner, GPU_PREREQUISITES, }; -use config::traits::SaveConfigWithBasePath; -use config::{ChainConfig, EcosystemConfig}; +use config::{traits::SaveConfigWithBasePath, ChainConfig, EcosystemConfig}; use xshell::{cmd, Shell}; use super::{ @@ -15,13 +13,16 @@ use super::{ }, utils::get_link_to_prover, }; -use crate::messages::{ - MSG_BELLMAN_CUDA_DIR_ERR, MSG_CHAIN_NOT_FOUND_ERR, MSG_MISSING_COMPONENT_ERR, - MSG_RUNNING_COMPRESSOR, MSG_RUNNING_COMPRESSOR_ERR, MSG_RUNNING_PROVER, MSG_RUNNING_PROVER_ERR, - MSG_RUNNING_PROVER_GATEWAY, MSG_RUNNING_PROVER_GATEWAY_ERR, MSG_RUNNING_PROVER_JOB_MONITOR, - MSG_RUNNING_WITNESS_GENERATOR, MSG_RUNNING_WITNESS_GENERATOR_ERR, - MSG_RUNNING_WITNESS_VECTOR_GENERATOR, MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, - MSG_WITNESS_GENERATOR_ROUND_ERR, +use crate::{ + commands::prover::args::run::FriProverRunArgs, + messages::{ + MSG_BELLMAN_CUDA_DIR_ERR, MSG_CHAIN_NOT_FOUND_ERR, MSG_MISSING_COMPONENT_ERR, + MSG_RUNNING_COMPRESSOR, MSG_RUNNING_COMPRESSOR_ERR, MSG_RUNNING_PROVER, + MSG_RUNNING_PROVER_ERR, MSG_RUNNING_PROVER_GATEWAY, MSG_RUNNING_PROVER_GATEWAY_ERR, + MSG_RUNNING_PROVER_JOB_MONITOR, MSG_RUNNING_WITNESS_GENERATOR, + MSG_RUNNING_WITNESS_GENERATOR_ERR, MSG_RUNNING_WITNESS_VECTOR_GENERATOR, + MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, MSG_WITNESS_GENERATOR_ROUND_ERR, + }, }; pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<()> { From 757135414e14b7b67229b18e1af65fded042c9ce Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 12:27:15 +0300 Subject: [PATCH 22/43] remove redundant arg --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 83d408533e55..7ff03ba4c16e 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -123,12 +123,7 @@ fn run_witness_vector_generator( let threads = args.threads.unwrap_or(1).to_string(); if let Some(docker_image) = docker_image { - run_dockerized_component( - shell, - docker_image, - &format!("--threads={threads}"), - MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, - ) + run_dockerized_component(shell, docker_image, &format!("--threads={threads}")) } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); From 10e4ad3505b996b3b664dde86a9add6515f261ab Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 12:50:03 +0300 Subject: [PATCH 23/43] fix path to configs --- .../zk_inception/src/commands/prover/run.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 7ff03ba4c16e..d40caff07188 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -71,7 +71,7 @@ fn run_gateway( logger::info(MSG_RUNNING_PROVER_GATEWAY); if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, "") + run_dockerized_component(shell, docker_image, chain, "") } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -102,7 +102,7 @@ fn run_witness_generator( }; if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, round_str) + run_dockerized_component(shell, docker_image, chain, round_str) } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -153,7 +153,7 @@ fn run_prover( if let Some(docker_image) = docker_image { change_setup_data_path(shell, "prover/data/keys")?; - run_dockerized_component(shell, docker_image, &additional_args) + run_dockerized_component(shell, docker_image, chain, &additional_args) } else { change_setup_data_path(shell, "data/keys")?; check_prerequisites(shell, &GPU_PREREQUISITES, false); @@ -181,7 +181,7 @@ fn run_compressor( logger::info(MSG_RUNNING_COMPRESSOR); if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, "") + run_dockerized_component(shell, docker_image, chain, "") } else { check_prerequisites(shell, &GPU_PREREQUISITES, false); let config_path = chain.path_to_general_config(); @@ -209,7 +209,7 @@ fn run_prover_job_monitor( logger::info(MSG_RUNNING_PROVER_JOB_MONITOR); if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, "") + run_dockerized_component(shell, docker_image, chain, "") } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -223,19 +223,16 @@ fn run_prover_job_monitor( fn run_dockerized_component( shell: &Shell, image_name: &str, + chain_config: &ChainConfig, additional_args: &str, ) -> anyhow::Result<()> { - let ecosystem_config = EcosystemConfig::from_file(shell)?; let spinner = Spinner::new(&format!("Pulling image {}...", image_name)); let pull_cmd = Cmd::new(cmd!(shell, "docker pull {image_name}")); pull_cmd.run()?; spinner.finish(); - let path_to_configs = ecosystem_config - .load_chain(global_config().chain_name.clone()) - .expect(MSG_CHAIN_NOT_FOUND_ERR) - .configs - .clone(); + let path_to_configs = chain_config.configs.clone(); + let ecosystem_config = EcosystemConfig::from_file(shell)?; let path_to_prover = get_link_to_prover(&ecosystem_config); let mut cmd = if additional_args.is_empty() { From e91c28e8820221d555eb80601f5204a3153bf0fc Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 12:50:57 +0300 Subject: [PATCH 24/43] fix path to configs --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index d40caff07188..d14577e32f70 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -123,7 +123,7 @@ fn run_witness_vector_generator( let threads = args.threads.unwrap_or(1).to_string(); if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, &format!("--threads={threads}")) + run_dockerized_component(shell, docker_image, chain, &format!("--threads={threads}")) } else { let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); From d4a6fc16bfc6af13d01918ebf364e659e891c744 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 12:57:36 +0300 Subject: [PATCH 25/43] fix max allocation arg --- zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index e083d7d4b151..47b9e7a030c9 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -95,6 +95,7 @@ impl WitnessVectorGeneratorArgs { #[derive(Debug, Clone, Parser, Default)] pub struct FriProverRunArgs { + #[clap(long)] pub max_allocation: Option, } From ec5b8118cd458e4629dd981e28269071fdc696b8 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:00:03 +0300 Subject: [PATCH 26/43] fix prerequisites --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index d14577e32f70..85ee57a84cca 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -140,7 +140,6 @@ fn run_prover( fri_prover_run_args: FriProverRunArgs, docker_image: Option<&str>, ) -> anyhow::Result<()> { - check_prerequisites(shell, &GPU_PREREQUISITES, false); logger::info(MSG_RUNNING_PROVER); let config_path = chain.path_to_general_config(); let secrets_path = chain.path_to_secrets_config(); @@ -155,6 +154,7 @@ fn run_prover( change_setup_data_path(shell, "prover/data/keys")?; run_dockerized_component(shell, docker_image, chain, &additional_args) } else { + check_prerequisites(shell, &GPU_PREREQUISITES, false); change_setup_data_path(shell, "data/keys")?; check_prerequisites(shell, &GPU_PREREQUISITES, false); let mut cmd = if additional_args.is_empty() { From 77afc82d817494df24d3cdea298e4e3c3d511890 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:03:18 +0300 Subject: [PATCH 27/43] fix chain config --- .../zk_inception/src/commands/prover/run.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 85ee57a84cca..352223855433 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -151,11 +151,11 @@ fn run_prover( }; if let Some(docker_image) = docker_image { - change_setup_data_path(shell, "prover/data/keys")?; + change_setup_data_path(shell, chain, "prover/data/keys")?; run_dockerized_component(shell, docker_image, chain, &additional_args) } else { check_prerequisites(shell, &GPU_PREREQUISITES, false); - change_setup_data_path(shell, "data/keys")?; + change_setup_data_path(shell, chain, "data/keys")?; check_prerequisites(shell, &GPU_PREREQUISITES, false); let mut cmd = if additional_args.is_empty() { Cmd::new( @@ -250,12 +250,11 @@ fn run_dockerized_component( cmd.run().map_err(|err| anyhow!(err)) } -fn change_setup_data_path(shell: &Shell, path: &str) -> anyhow::Result<()> { - let ecosystem_config = EcosystemConfig::from_file(shell).unwrap(); - let chain_config = ecosystem_config - .load_chain(global_config().chain_name.clone()) - .expect(MSG_CHAIN_NOT_FOUND_ERR); - +fn change_setup_data_path( + shell: &Shell, + chain_config: &ChainConfig, + path: &str, +) -> anyhow::Result<()> { let mut general_config = chain_config.get_general_config()?; if let Some(prover_config) = general_config.prover_config.as_mut() { From e8f2e604b0646a8c97752a73a55a39f51067a9d5 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:06:42 +0300 Subject: [PATCH 28/43] fix chain config --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 352223855433..2a38fc851938 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -261,7 +261,7 @@ fn change_setup_data_path( prover_config.setup_data_path = path.to_string(); } - general_config.save_with_base_path(shell, chain_config.configs)?; + general_config.save_with_base_path(shell, chain_config.configs.clone())?; Ok(()) } From 3e7379087da8f12d01b5ff18e1ded07bf1c3c78d Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:14:42 +0300 Subject: [PATCH 29/43] fix prerequisites --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 2a38fc851938..3e048e4009cd 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -177,7 +177,6 @@ fn run_compressor( ecosystem: &EcosystemConfig, docker_image: Option<&str>, ) -> anyhow::Result<()> { - check_prerequisites(shell, &GPU_PREREQUISITES, false); logger::info(MSG_RUNNING_COMPRESSOR); if let Some(docker_image) = docker_image { @@ -265,3 +264,5 @@ fn change_setup_data_path( Ok(()) } + +postgres://postgres:notsecurepassword@localhost:5432/zksync_prover_localhost_test \ No newline at end of file From 375a22d6c38aabc606527866cbeea5446493eab7 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:16:25 +0300 Subject: [PATCH 30/43] fix --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 3e048e4009cd..4d1eda93e74a 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -264,5 +264,3 @@ fn change_setup_data_path( Ok(()) } - -postgres://postgres:notsecurepassword@localhost:5432/zksync_prover_localhost_test \ No newline at end of file From 2c7b6a662aeac0fac1b31b36baa6134eafc3f50b Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:21:18 +0300 Subject: [PATCH 31/43] update README --- zk_toolbox/crates/zk_inception/README.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/README.md b/zk_toolbox/crates/zk_inception/README.md index 25eeff40247b..7a5fd3c84cfa 100644 --- a/zk_toolbox/crates/zk_inception/README.md +++ b/zk_toolbox/crates/zk_inception/README.md @@ -98,10 +98,10 @@ Create a new ecosystem and chain, setting necessary configurations for later ini Possible values: - - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env - - `random`: Generate random wallets - - `empty`: Generate placeholder wallets - - `in-file`: Specify file with wallets + - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env + - `random`: Generate random wallets + - `empty`: Generate placeholder wallets + - `in-file`: Specify file with wallets - `--wallet-path ` — Wallet path - `--l1-batch-commit-data-generator-mode ` — Commit data generation mode @@ -220,10 +220,10 @@ Create a new chain, setting the necessary configurations for later initializatio Possible values: - - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env - - `random`: Generate random wallets - - `empty`: Generate placeholder wallets - - `in-file`: Specify file with wallets + - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env + - `random`: Generate random wallets + - `empty`: Generate placeholder wallets + - `in-file`: Specify file with wallets - `--wallet-path ` — Wallet path - `--l1-batch-commit-data-generator-mode ` — Commit data generation mode @@ -504,12 +504,19 @@ Run prover Possible values: `gateway`, `witness-generator`, `witness-vector-generator`, `prover`, `compressor`, `prover-job-monitor` +- `--docker` - Whether to run image of the component instead of binary. + + Possible values: `true`, `false` + - `--round ` Possible values: `all-rounds`, `basic-circuits`, `leaf-aggregation`, `node-aggregation`, `recursion-tip`, `scheduler` - `--threads ` +- `--max-allocation ` - in case you are running prover component, the value limits maximum memory + allocation of it. + ## `zk_inception prover init-bellman-cuda` Initialize bellman-cuda From c6b1aea4710e2f42306d1295acaffb3deea88b1d Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:35:33 +0300 Subject: [PATCH 32/43] fmt --- zk_toolbox/crates/zk_inception/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/README.md b/zk_toolbox/crates/zk_inception/README.md index 7a5fd3c84cfa..5eaf81a28f6e 100644 --- a/zk_toolbox/crates/zk_inception/README.md +++ b/zk_toolbox/crates/zk_inception/README.md @@ -98,10 +98,10 @@ Create a new ecosystem and chain, setting necessary configurations for later ini Possible values: - - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env - - `random`: Generate random wallets - - `empty`: Generate placeholder wallets - - `in-file`: Specify file with wallets + - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env + - `random`: Generate random wallets + - `empty`: Generate placeholder wallets + - `in-file`: Specify file with wallets - `--wallet-path ` — Wallet path - `--l1-batch-commit-data-generator-mode ` — Commit data generation mode @@ -220,10 +220,10 @@ Create a new chain, setting the necessary configurations for later initializatio Possible values: - - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env - - `random`: Generate random wallets - - `empty`: Generate placeholder wallets - - `in-file`: Specify file with wallets + - `localhost`: Load wallets from localhost mnemonic, they are funded for localhost env + - `random`: Generate random wallets + - `empty`: Generate placeholder wallets + - `in-file`: Specify file with wallets - `--wallet-path ` — Wallet path - `--l1-batch-commit-data-generator-mode ` — Commit data generation mode From 4e8970428a98c6fd5eed4d9673a0fb148e8c2dea Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:17:01 +0300 Subject: [PATCH 33/43] refactor prover run command --- .../src/commands/prover/args/run.rs | 99 +++++- .../zk_inception/src/commands/prover/run.rs | 307 +++++------------- 2 files changed, 186 insertions(+), 220 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index 47b9e7a030c9..747979cd7d36 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -1,8 +1,16 @@ use clap::{Parser, ValueEnum}; use common::{Prompt, PromptSelect}; +use config::{ChainConfig, EcosystemConfig}; use strum::{EnumIter, IntoEnumIterator}; +use xshell::Shell; -use crate::messages::{MSG_ROUND_SELECT_PROMPT, MSG_RUN_COMPONENT_PROMPT, MSG_THREADS_PROMPT}; +use crate::{ + commands::prover::utils::get_link_to_prover, + messages::{ + MSG_ROUND_SELECT_PROMPT, MSG_RUN_COMPONENT_PROMPT, MSG_THREADS_PROMPT, + MSG_WITNESS_GENERATOR_ROUND_ERR, + }, +}; #[derive(Debug, Clone, Parser, Default)] pub struct ProverRunArgs { @@ -47,6 +55,95 @@ impl ProverComponent { Self::ProverJobMonitor => "matterlabs/prover-job-monitor:latest2.0", } } + + pub fn binary_name(&self) -> &'static str { + match self { + Self::Gateway => "zksync_prover_fri_gateway", + Self::WitnessGenerator => "zksync_witness_generator", + Self::WitnessVectorGenerator => "zksync_witness_vector_generator", + Self::Prover => "zksync_prover_fri", + Self::Compressor => "zksync_proof_fri_compressor", + Self::ProverJobMonitor => "zksync_prover_job_monitor", + } + } + + pub fn get_application_args( + &self, + in_docker: bool, + chain: &ChainConfig, + shell: &Shell, + ) -> anyhow::Result> { + let path_to_configs = chain.configs.clone(); + let ecosystem_config = EcosystemConfig::from_file(shell)?; + let path_to_prover = get_link_to_prover(&ecosystem_config); + + let mut application_args = match in_docker{ + true => format!("--net=host -v {path_to_prover:?}/data/keys:/prover/data/keys -v {path_to_prover:?}/artifacts:/artifacts -v {path_to_configs:?}:/configs"), + false => "".to_string(), + }; + + if self == &Self::Prover || self == &Self::Compressor { + if in_docker { + application_args += " --gpus=all"; + } else { + application_args += "--features gpu"; + } + } + + if application_args.clone().is_empty() { + Ok(None) + } else { + Ok(Some(application_args)) + } + } + + pub fn get_additional_args( + &self, + args: ProverRunArgs, + chain: &ChainConfig, + ) -> anyhow::Result> { + let general_config = chain.path_to_general_config(); + let secrets_config = chain.path_to_secrets_config(); + + let mut additional_args = + format!("--config-path={general_config:?} --secrets-path={secrets_config:?}"); + + match self { + Self::WitnessGenerator => { + additional_args += match args + .witness_generator_args + .round + .expect(MSG_WITNESS_GENERATOR_ROUND_ERR) + { + WitnessGeneratorRound::AllRounds => " --all_rounds", + WitnessGeneratorRound::BasicCircuits => " --round=basic_circuits", + WitnessGeneratorRound::LeafAggregation => " --round=leaf_aggregation", + WitnessGeneratorRound::NodeAggregation => " --round=node_aggregation", + WitnessGeneratorRound::RecursionTip => " --round=recursion_tip", + WitnessGeneratorRound::Scheduler => " --round=scheduler", + }; + } + Self::WitnessVectorGenerator => { + additional_args += format!( + " --threads={}", + args.witness_vector_generator_args.threads.unwrap_or(1) + ) + .as_str(); + } + Self::Prover => { + if args.fri_prover_args.max_allocation.is_some() { + additional_args += format!( + " --max-allocation={}", + args.fri_prover_args.max_allocation.unwrap() + ) + .as_str(); + }; + } + _ => {} + }; + + Ok(Some(additional_args)) + } } #[derive(Debug, Clone, Parser, Default)] diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 4d1eda93e74a..e97f0fa23546 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -3,26 +3,19 @@ use common::{ check_prerequisites, cmd::Cmd, config::global_config, logger, spinner::Spinner, GPU_PREREQUISITES, }; -use config::{traits::SaveConfigWithBasePath, ChainConfig, EcosystemConfig}; +use config::EcosystemConfig; use xshell::{cmd, Shell}; use super::{ - args::run::{ - ProverComponent, ProverRunArgs, WitnessGeneratorArgs, WitnessGeneratorRound, - WitnessVectorGeneratorArgs, - }, + args::run::{ProverComponent, ProverRunArgs}, utils::get_link_to_prover, }; -use crate::{ - commands::prover::args::run::FriProverRunArgs, - messages::{ - MSG_BELLMAN_CUDA_DIR_ERR, MSG_CHAIN_NOT_FOUND_ERR, MSG_MISSING_COMPONENT_ERR, - MSG_RUNNING_COMPRESSOR, MSG_RUNNING_COMPRESSOR_ERR, MSG_RUNNING_PROVER, - MSG_RUNNING_PROVER_ERR, MSG_RUNNING_PROVER_GATEWAY, MSG_RUNNING_PROVER_GATEWAY_ERR, - MSG_RUNNING_PROVER_JOB_MONITOR, MSG_RUNNING_WITNESS_GENERATOR, - MSG_RUNNING_WITNESS_GENERATOR_ERR, MSG_RUNNING_WITNESS_VECTOR_GENERATOR, - MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, MSG_WITNESS_GENERATOR_ROUND_ERR, - }, +use crate::messages::{ + MSG_BELLMAN_CUDA_DIR_ERR, MSG_CHAIN_NOT_FOUND_ERR, MSG_MISSING_COMPONENT_ERR, + MSG_RUNNING_COMPRESSOR, MSG_RUNNING_COMPRESSOR_ERR, MSG_RUNNING_PROVER, MSG_RUNNING_PROVER_ERR, + MSG_RUNNING_PROVER_GATEWAY, MSG_RUNNING_PROVER_GATEWAY_ERR, MSG_RUNNING_PROVER_JOB_MONITOR, + MSG_RUNNING_WITNESS_GENERATOR, MSG_RUNNING_WITNESS_GENERATOR_ERR, + MSG_RUNNING_WITNESS_VECTOR_GENERATOR, MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, }; pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<()> { @@ -35,232 +28,108 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() let link_to_prover = get_link_to_prover(&ecosystem_config); shell.change_dir(link_to_prover.clone()); - let docker_image = args.component.map(|component| component.image_name()); - - match args.component { - Some(ProverComponent::Gateway) => run_gateway(shell, &chain, docker_image)?, - Some(ProverComponent::WitnessGenerator) => { - run_witness_generator(shell, &chain, args.witness_generator_args, docker_image)? - } - Some(ProverComponent::WitnessVectorGenerator) => run_witness_vector_generator( - shell, - &chain, - args.witness_vector_generator_args, - docker_image, - )?, - Some(ProverComponent::Prover) => { - run_prover(shell, &chain, args.fri_prover_args, docker_image)? + let component = args.component.context(anyhow!(MSG_MISSING_COMPONENT_ERR))?; + let in_docker = args.docker.unwrap_or(false); + + let application_args = component.get_application_args(in_docker, &chain, shell)?; + let additional_args = component.get_additional_args(args, &chain)?; + + let (message, error) = match component { + ProverComponent::WitnessGenerator => ( + MSG_RUNNING_WITNESS_GENERATOR, + MSG_RUNNING_WITNESS_GENERATOR_ERR, + ), + ProverComponent::WitnessVectorGenerator => ( + MSG_RUNNING_WITNESS_VECTOR_GENERATOR, + MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, + ), + ProverComponent::Prover => { + if !in_docker { + check_prerequisites(shell, &GPU_PREREQUISITES, false); + } + (MSG_RUNNING_PROVER, MSG_RUNNING_PROVER_ERR) } - Some(ProverComponent::Compressor) => { - run_compressor(shell, &chain, &ecosystem_config, docker_image)? + ProverComponent::Compressor => { + if !in_docker { + check_prerequisites(shell, &GPU_PREREQUISITES, false); + shell.set_var( + "BELLMAN_CUDA_DIR", + ecosystem_config + .bellman_cuda_dir + .clone() + .expect(MSG_BELLMAN_CUDA_DIR_ERR), + ); + } + (MSG_RUNNING_COMPRESSOR, MSG_RUNNING_COMPRESSOR_ERR) } - Some(ProverComponent::ProverJobMonitor) => { - run_prover_job_monitor(shell, &chain, docker_image)? - } - None => anyhow::bail!(MSG_MISSING_COMPONENT_ERR), - } - - Ok(()) -} - -fn run_gateway( - shell: &Shell, - chain: &ChainConfig, - docker_image: Option<&str>, -) -> anyhow::Result<()> { - logger::info(MSG_RUNNING_PROVER_GATEWAY); - - if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, chain, "") - } else { - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_prover_fri_gateway -- --config-path={config_path} --secrets-path={secrets_path}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_PROVER_GATEWAY_ERR) - } -} - -fn run_witness_generator( - shell: &Shell, - chain: &ChainConfig, - args: WitnessGeneratorArgs, - docker_image: Option<&str>, -) -> anyhow::Result<()> { - logger::info(MSG_RUNNING_WITNESS_GENERATOR); - - let round = args.round.expect(MSG_WITNESS_GENERATOR_ROUND_ERR); - - let round_str = match round { - WitnessGeneratorRound::AllRounds => "--all_rounds", - WitnessGeneratorRound::BasicCircuits => "--round=basic_circuits", - WitnessGeneratorRound::LeafAggregation => "--round=leaf_aggregation", - WitnessGeneratorRound::NodeAggregation => "--round=node_aggregation", - WitnessGeneratorRound::RecursionTip => "--round=recursion_tip", - WitnessGeneratorRound::Scheduler => "--round=scheduler", - }; - - if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, chain, round_str) - } else { - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_witness_generator -- {round_str} --config-path={config_path} --secrets-path={secrets_path}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_WITNESS_GENERATOR_ERR) - } -} - -fn run_witness_vector_generator( - shell: &Shell, - chain: &ChainConfig, - args: WitnessVectorGeneratorArgs, - docker_image: Option<&str>, -) -> anyhow::Result<()> { - logger::info(MSG_RUNNING_WITNESS_VECTOR_GENERATOR); - let threads = args.threads.unwrap_or(1).to_string(); - - if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, chain, &format!("--threads={threads}")) - } else { - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_witness_vector_generator -- --config-path={config_path} --secrets-path={secrets_path} --threads={threads}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR) - } -} - -fn run_prover( - shell: &Shell, - chain: &ChainConfig, - fri_prover_run_args: FriProverRunArgs, - docker_image: Option<&str>, -) -> anyhow::Result<()> { - logger::info(MSG_RUNNING_PROVER); - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - - let additional_args = if let Some(max_allocation) = fri_prover_run_args.max_allocation { - format!("--max-allocation={max_allocation}") - } else { - "".to_string() + ProverComponent::ProverJobMonitor => ( + MSG_RUNNING_PROVER_JOB_MONITOR, + MSG_RUNNING_PROVER_JOB_MONITOR, + ), + ProverComponent::Gateway => (MSG_RUNNING_PROVER_GATEWAY, MSG_RUNNING_PROVER_GATEWAY_ERR), }; - if let Some(docker_image) = docker_image { - change_setup_data_path(shell, chain, "prover/data/keys")?; - run_dockerized_component(shell, docker_image, chain, &additional_args) - } else { - check_prerequisites(shell, &GPU_PREREQUISITES, false); - change_setup_data_path(shell, chain, "data/keys")?; - check_prerequisites(shell, &GPU_PREREQUISITES, false); - let mut cmd = if additional_args.is_empty() { - Cmd::new( - cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path}"), - ) - } else { - Cmd::new( - cmd!(shell, "cargo run --features gpu --release --bin zksync_prover_fri -- --config-path={config_path} --secrets-path={secrets_path} {additional_args}"), - ) - }; - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_PROVER_ERR) - } -} - -fn run_compressor( - shell: &Shell, - chain: &ChainConfig, - ecosystem: &EcosystemConfig, - docker_image: Option<&str>, -) -> anyhow::Result<()> { - logger::info(MSG_RUNNING_COMPRESSOR); - - if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, chain, "") + if in_docker { + run_dockerized_component( + shell, + component.image_name(), + application_args, + additional_args, + message, + error, + )? } else { - check_prerequisites(shell, &GPU_PREREQUISITES, false); - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - - shell.set_var( - "BELLMAN_CUDA_DIR", - ecosystem - .bellman_cuda_dir - .clone() - .expect(MSG_BELLMAN_CUDA_DIR_ERR), - ); - - let mut cmd = Cmd::new(cmd!(shell, "cargo run --features gpu --release --bin zksync_proof_fri_compressor -- --config-path={config_path} --secrets-path={secrets_path}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_COMPRESSOR_ERR) + run_binary_component( + shell, + component.binary_name(), + application_args, + additional_args, + message, + error, + )? } -} -fn run_prover_job_monitor( - shell: &Shell, - chain: &ChainConfig, - docker_image: Option<&str>, -) -> anyhow::Result<()> { - logger::info(MSG_RUNNING_PROVER_JOB_MONITOR); - - if let Some(docker_image) = docker_image { - run_dockerized_component(shell, docker_image, chain, "") - } else { - let config_path = chain.path_to_general_config(); - let secrets_path = chain.path_to_secrets_config(); - - let mut cmd = Cmd::new(cmd!(shell, "cargo run --release --bin zksync_prover_job_monitor -- --config-path={config_path} --secrets-path={secrets_path}")); - cmd = cmd.with_force_run(); - cmd.run().context(MSG_RUNNING_PROVER_JOB_MONITOR) - } + Ok(()) } fn run_dockerized_component( shell: &Shell, image_name: &str, - chain_config: &ChainConfig, - additional_args: &str, + application_args: Option, + args: Option, + message: &'static str, + error: &'static str, ) -> anyhow::Result<()> { let spinner = Spinner::new(&format!("Pulling image {}...", image_name)); let pull_cmd = Cmd::new(cmd!(shell, "docker pull {image_name}")); - pull_cmd.run()?; + pull_cmd.run().context(error)?; spinner.finish(); - let path_to_configs = chain_config.configs.clone(); - let ecosystem_config = EcosystemConfig::from_file(shell)?; - let path_to_prover = get_link_to_prover(&ecosystem_config); + logger::info(message); + + let mut cmd = Cmd::new(cmd!( + shell, + "docker run {application_args...} {image_name} {args...}" + )); - let mut cmd = if additional_args.is_empty() { - Cmd::new(cmd!( - shell, - "docker run --net=host --gpus=all -v {path_to_prover}/data/keys:/prover/data/keys -v {path_to_prover}/artifacts:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml" - )) - } else { - Cmd::new(cmd!( - shell, - "docker run --net=host --gpus=all -v {path_to_prover}/data/keys:/prover/data/keys -v {path_to_prover}/artifacts:/artifacts -v {path_to_configs}:/configs {image_name} --config-path=/configs/general.yaml --secrets-path=/configs/secrets.yaml {additional_args}" - )) - }; cmd = cmd.with_force_run(); - cmd.run().map_err(|err| anyhow!(err)) + cmd.run().context(error) } -fn change_setup_data_path( +fn run_binary_component( shell: &Shell, - chain_config: &ChainConfig, - path: &str, + binary_name: &str, + application_args: Option, + args: Option, + message: &'static str, + error: &'static str, ) -> anyhow::Result<()> { - let mut general_config = chain_config.get_general_config()?; - - if let Some(prover_config) = general_config.prover_config.as_mut() { - prover_config.setup_data_path = path.to_string(); - } - - general_config.save_with_base_path(shell, chain_config.configs.clone())?; + logger::info(message); - Ok(()) + let mut cmd = Cmd::new(cmd!( + shell, + "cargo run {application_args...} --release --bin {binary_name} -- {args...}" + )); + cmd = cmd.with_force_run(); + cmd.run().context(error) } From d9a0253a3f84908ade76f2f7b85bbcfc5f375523 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:20:51 +0300 Subject: [PATCH 34/43] fix commands --- .../zk_inception/src/commands/prover/args/run.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index 747979cd7d36..f901e0c58ab6 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -73,9 +73,9 @@ impl ProverComponent { chain: &ChainConfig, shell: &Shell, ) -> anyhow::Result> { - let path_to_configs = chain.configs.clone(); + let path_to_configs = chain.configs.clone().into_os_string(); let ecosystem_config = EcosystemConfig::from_file(shell)?; - let path_to_prover = get_link_to_prover(&ecosystem_config); + let path_to_prover = get_link_to_prover(&ecosystem_config).into_os_string(); let mut application_args = match in_docker{ true => format!("--net=host -v {path_to_prover:?}/data/keys:/prover/data/keys -v {path_to_prover:?}/artifacts:/artifacts -v {path_to_configs:?}:/configs"), @@ -102,11 +102,11 @@ impl ProverComponent { args: ProverRunArgs, chain: &ChainConfig, ) -> anyhow::Result> { - let general_config = chain.path_to_general_config(); - let secrets_config = chain.path_to_secrets_config(); + let general_config = chain.path_to_general_config().into_os_string(); + let secrets_config = chain.path_to_secrets_config().into_os_string(); let mut additional_args = - format!("--config-path={general_config:?} --secrets-path={secrets_config:?}"); + format!("--config-path={general_config} --secrets-path={secrets_config:?}"); match self { Self::WitnessGenerator => { From e132cbca872b8d072dd93d9a58093abe221b531a Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:24:25 +0300 Subject: [PATCH 35/43] fix commands --- .../src/commands/prover/args/run.rs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index f901e0c58ab6..144cca02e3e8 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -1,3 +1,4 @@ +use anyhow::anyhow; use clap::{Parser, ValueEnum}; use common::{Prompt, PromptSelect}; use config::{ChainConfig, EcosystemConfig}; @@ -73,9 +74,17 @@ impl ProverComponent { chain: &ChainConfig, shell: &Shell, ) -> anyhow::Result> { - let path_to_configs = chain.configs.clone().into_os_string(); + let path_to_configs = chain + .configs + .clone() + .into_os_string() + .into_string() + .map_err(|_| anyhow!("Failed to convert path to string"))?; let ecosystem_config = EcosystemConfig::from_file(shell)?; - let path_to_prover = get_link_to_prover(&ecosystem_config).into_os_string(); + let path_to_prover = get_link_to_prover(&ecosystem_config) + .into_os_string() + .into_string() + .map_err(|_| anyhow!("Failed to convert path to string"))?; let mut application_args = match in_docker{ true => format!("--net=host -v {path_to_prover:?}/data/keys:/prover/data/keys -v {path_to_prover:?}/artifacts:/artifacts -v {path_to_configs:?}:/configs"), @@ -102,8 +111,16 @@ impl ProverComponent { args: ProverRunArgs, chain: &ChainConfig, ) -> anyhow::Result> { - let general_config = chain.path_to_general_config().into_os_string(); - let secrets_config = chain.path_to_secrets_config().into_os_string(); + let general_config = chain + .path_to_general_config() + .into_os_string() + .into_string() + .map_err(|_| anyhow!("Failed to convert path to string"))?; + let secrets_config = chain + .path_to_secrets_config() + .into_os_string() + .into_string() + .map_err(|_| anyhow!("Failed to convert path to string"))?; let mut additional_args = format!("--config-path={general_config} --secrets-path={secrets_config:?}"); From aa77a011e5783ad8c2ada2b7f9cf4c5c101e1c52 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:26:38 +0300 Subject: [PATCH 36/43] fix commands --- .../crates/zk_inception/src/commands/prover/args/run.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index 144cca02e3e8..3b930beaf494 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -87,7 +87,7 @@ impl ProverComponent { .map_err(|_| anyhow!("Failed to convert path to string"))?; let mut application_args = match in_docker{ - true => format!("--net=host -v {path_to_prover:?}/data/keys:/prover/data/keys -v {path_to_prover:?}/artifacts:/artifacts -v {path_to_configs:?}:/configs"), + true => format!("--net=host -v {path_to_prover}/data/keys:/prover/data/keys -v {path_to_prover}/artifacts:/artifacts -v {path_to_configs}:/configs"), false => "".to_string(), }; @@ -123,7 +123,7 @@ impl ProverComponent { .map_err(|_| anyhow!("Failed to convert path to string"))?; let mut additional_args = - format!("--config-path={general_config} --secrets-path={secrets_config:?}"); + format!("--config-path={general_config} --secrets-path={secrets_config}"); match self { Self::WitnessGenerator => { From 8f033b5d378746160d8cdc54ebd14cb1a0ed913a Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:31:41 +0300 Subject: [PATCH 37/43] fix commands --- .../zk_inception/src/commands/prover/run.rs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index e97f0fa23546..b3ec71b38072 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -107,6 +107,20 @@ fn run_dockerized_component( logger::info(message); + let application_args_raw = application_args.unwrap_or_default(); + let application_args = if application_args_raw.is_empty() { + None + } else { + Some(application_args_raw.as_str()) + }; + + let args_raw = args.unwrap_or_default(); + let args = if args_raw.is_empty() { + None + } else { + Some(args_raw.as_str()) + }; + let mut cmd = Cmd::new(cmd!( shell, "docker run {application_args...} {image_name} {args...}" @@ -126,6 +140,20 @@ fn run_binary_component( ) -> anyhow::Result<()> { logger::info(message); + let application_args_raw = application_args.unwrap_or_default(); + let application_args = if application_args_raw.is_empty() { + None + } else { + Some(application_args_raw.as_str()) + }; + + let args_raw = args.unwrap_or_default(); + let args = if args_raw.is_empty() { + None + } else { + Some(args_raw.as_str()) + }; + let mut cmd = Cmd::new(cmd!( shell, "cargo run {application_args...} --release --bin {binary_name} -- {args...}" From e06c8f852de2a8f9b5dc70bdeeec526878fbe027 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:34:53 +0300 Subject: [PATCH 38/43] try fix once again --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index b3ec71b38072..65f158dcf288 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -123,7 +123,7 @@ fn run_dockerized_component( let mut cmd = Cmd::new(cmd!( shell, - "docker run {application_args...} {image_name} {args...}" + "docker run {application_args} {image_name} {args}" )); cmd = cmd.with_force_run(); @@ -156,7 +156,7 @@ fn run_binary_component( let mut cmd = Cmd::new(cmd!( shell, - "cargo run {application_args...} --release --bin {binary_name} -- {args...}" + "cargo run {application_args} --release --bin {binary_name} -- {args}" )); cmd = cmd.with_force_run(); cmd.run().context(error) From 8cce8eb6c2f92c2ea71045d40d5dc453ab986889 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:46:22 +0300 Subject: [PATCH 39/43] try fix once again --- .../src/commands/prover/args/run.rs | 12 ++-- .../zk_inception/src/commands/prover/run.rs | 55 +++++++------------ 2 files changed, 23 insertions(+), 44 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index 3b930beaf494..2a432c728a63 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -73,7 +73,7 @@ impl ProverComponent { in_docker: bool, chain: &ChainConfig, shell: &Shell, - ) -> anyhow::Result> { + ) -> anyhow::Result { let path_to_configs = chain .configs .clone() @@ -99,18 +99,14 @@ impl ProverComponent { } } - if application_args.clone().is_empty() { - Ok(None) - } else { - Ok(Some(application_args)) - } + Ok(application_args) } pub fn get_additional_args( &self, args: ProverRunArgs, chain: &ChainConfig, - ) -> anyhow::Result> { + ) -> anyhow::Result { let general_config = chain .path_to_general_config() .into_os_string() @@ -159,7 +155,7 @@ impl ProverComponent { _ => {} }; - Ok(Some(additional_args)) + Ok(additional_args) } } diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 65f158dcf288..88a8f6251732 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -95,8 +95,8 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() fn run_dockerized_component( shell: &Shell, image_name: &str, - application_args: Option, - args: Option, + application_args: String, + args: String, message: &'static str, error: &'static str, ) -> anyhow::Result<()> { @@ -107,25 +107,15 @@ fn run_dockerized_component( logger::info(message); - let application_args_raw = application_args.unwrap_or_default(); - let application_args = if application_args_raw.is_empty() { - None + let mut cmd = if application_args.is_empty() { + Cmd::new(cmd!(shell, "docker run {image_name} {args}")) } else { - Some(application_args_raw.as_str()) - }; - - let args_raw = args.unwrap_or_default(); - let args = if args_raw.is_empty() { - None - } else { - Some(args_raw.as_str()) + Cmd::new(cmd!( + shell, + "docker run {application_args} {image_name} {args}" + )) }; - let mut cmd = Cmd::new(cmd!( - shell, - "docker run {application_args} {image_name} {args}" - )); - cmd = cmd.with_force_run(); cmd.run().context(error) } @@ -133,31 +123,24 @@ fn run_dockerized_component( fn run_binary_component( shell: &Shell, binary_name: &str, - application_args: Option, - args: Option, + application_args: String, + args: String, message: &'static str, error: &'static str, ) -> anyhow::Result<()> { logger::info(message); - let application_args_raw = application_args.unwrap_or_default(); - let application_args = if application_args_raw.is_empty() { - None - } else { - Some(application_args_raw.as_str()) - }; - - let args_raw = args.unwrap_or_default(); - let args = if args_raw.is_empty() { - None + let mut cmd = if application_args.is_empty() { + Cmd::new(cmd!( + shell, + "cargo run --release --bin {binary_name} -- {args}" + )) } else { - Some(args_raw.as_str()) + Cmd::new(cmd!( + shell, + "cargo run {application_args} --release --bin {binary_name} -- {args}" + )) }; - - let mut cmd = Cmd::new(cmd!( - shell, - "cargo run {application_args} --release --bin {binary_name} -- {args}" - )); cmd = cmd.with_force_run(); cmd.run().context(error) } From 8700be161fa57e75c3734ba872abd60dda26b959 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 18:11:45 +0300 Subject: [PATCH 40/43] fix --- .../src/commands/prover/args/run.rs | 89 +++++++------------ .../zk_inception/src/commands/prover/run.rs | 54 ++++++----- 2 files changed, 60 insertions(+), 83 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index 2a432c728a63..70d8f899d5f2 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -1,16 +1,12 @@ use anyhow::anyhow; use clap::{Parser, ValueEnum}; use common::{Prompt, PromptSelect}; -use config::{ChainConfig, EcosystemConfig}; +use config::ChainConfig; use strum::{EnumIter, IntoEnumIterator}; -use xshell::Shell; -use crate::{ - commands::prover::utils::get_link_to_prover, - messages::{ - MSG_ROUND_SELECT_PROMPT, MSG_RUN_COMPONENT_PROMPT, MSG_THREADS_PROMPT, - MSG_WITNESS_GENERATOR_ROUND_ERR, - }, +use crate::messages::{ + MSG_ROUND_SELECT_PROMPT, MSG_RUN_COMPONENT_PROMPT, MSG_THREADS_PROMPT, + MSG_WITNESS_GENERATOR_ROUND_ERR, }; #[derive(Debug, Clone, Parser, Default)] @@ -68,34 +64,14 @@ impl ProverComponent { } } - pub fn get_application_args( - &self, - in_docker: bool, - chain: &ChainConfig, - shell: &Shell, - ) -> anyhow::Result { - let path_to_configs = chain - .configs - .clone() - .into_os_string() - .into_string() - .map_err(|_| anyhow!("Failed to convert path to string"))?; - let ecosystem_config = EcosystemConfig::from_file(shell)?; - let path_to_prover = get_link_to_prover(&ecosystem_config) - .into_os_string() - .into_string() - .map_err(|_| anyhow!("Failed to convert path to string"))?; - - let mut application_args = match in_docker{ - true => format!("--net=host -v {path_to_prover}/data/keys:/prover/data/keys -v {path_to_prover}/artifacts:/artifacts -v {path_to_configs}:/configs"), - false => "".to_string(), - }; + pub fn get_application_args(&self, in_docker: bool) -> anyhow::Result> { + let mut application_args = vec![]; if self == &Self::Prover || self == &Self::Compressor { if in_docker { - application_args += " --gpus=all"; + application_args.push("--gpus=all".to_string()); } else { - application_args += "--features gpu"; + application_args.push("--features=gpu".to_string()); } } @@ -106,7 +82,7 @@ impl ProverComponent { &self, args: ProverRunArgs, chain: &ChainConfig, - ) -> anyhow::Result { + ) -> anyhow::Result> { let general_config = chain .path_to_general_config() .into_os_string() @@ -118,38 +94,41 @@ impl ProverComponent { .into_string() .map_err(|_| anyhow!("Failed to convert path to string"))?; - let mut additional_args = - format!("--config-path={general_config} --secrets-path={secrets_config}"); + let mut additional_args = vec![ + format!("--config-path={}", general_config), + format!("--secrets-path={}", secrets_config), + ]; match self { Self::WitnessGenerator => { - additional_args += match args - .witness_generator_args - .round - .expect(MSG_WITNESS_GENERATOR_ROUND_ERR) - { - WitnessGeneratorRound::AllRounds => " --all_rounds", - WitnessGeneratorRound::BasicCircuits => " --round=basic_circuits", - WitnessGeneratorRound::LeafAggregation => " --round=leaf_aggregation", - WitnessGeneratorRound::NodeAggregation => " --round=node_aggregation", - WitnessGeneratorRound::RecursionTip => " --round=recursion_tip", - WitnessGeneratorRound::Scheduler => " --round=scheduler", - }; + additional_args.push( + match args + .witness_generator_args + .round + .expect(MSG_WITNESS_GENERATOR_ROUND_ERR) + { + WitnessGeneratorRound::AllRounds => "--all_rounds", + WitnessGeneratorRound::BasicCircuits => "--round=basic_circuits", + WitnessGeneratorRound::LeafAggregation => "--round=leaf_aggregation", + WitnessGeneratorRound::NodeAggregation => "--round=node_aggregation", + WitnessGeneratorRound::RecursionTip => "--round=recursion_tip", + WitnessGeneratorRound::Scheduler => "--round=scheduler", + } + .to_string(), + ); } Self::WitnessVectorGenerator => { - additional_args += format!( - " --threads={}", + additional_args.push(format!( + "--threads={}", args.witness_vector_generator_args.threads.unwrap_or(1) - ) - .as_str(); + )); } Self::Prover => { if args.fri_prover_args.max_allocation.is_some() { - additional_args += format!( - " --max-allocation={}", + additional_args.push(format!( + "--max-allocation={}", args.fri_prover_args.max_allocation.unwrap() - ) - .as_str(); + )); }; } _ => {} diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 88a8f6251732..69f812b569fb 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use anyhow::{anyhow, Context}; use common::{ check_prerequisites, cmd::Cmd, config::global_config, logger, spinner::Spinner, @@ -31,7 +33,7 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() let component = args.component.context(anyhow!(MSG_MISSING_COMPONENT_ERR))?; let in_docker = args.docker.unwrap_or(false); - let application_args = component.get_application_args(in_docker, &chain, shell)?; + let application_args = component.get_application_args(in_docker)?; let additional_args = component.get_additional_args(args, &chain)?; let (message, error) = match component { @@ -70,20 +72,25 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() }; if in_docker { + let path_to_configs = chain.configs.clone(); + let ecosystem_config = EcosystemConfig::from_file(shell)?; + let path_to_prover = get_link_to_prover(&ecosystem_config); run_dockerized_component( shell, component.image_name(), - application_args, - additional_args, + &application_args, + &additional_args, message, error, + &path_to_configs, + &path_to_prover, )? } else { run_binary_component( shell, component.binary_name(), - application_args, - additional_args, + &application_args, + &additional_args, message, error, )? @@ -95,10 +102,12 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() fn run_dockerized_component( shell: &Shell, image_name: &str, - application_args: String, - args: String, + application_args: &[String], + args: &[String], message: &'static str, error: &'static str, + path_to_configs: &PathBuf, + path_to_prover: &PathBuf, ) -> anyhow::Result<()> { let spinner = Spinner::new(&format!("Pulling image {}...", image_name)); let pull_cmd = Cmd::new(cmd!(shell, "docker pull {image_name}")); @@ -107,14 +116,10 @@ fn run_dockerized_component( logger::info(message); - let mut cmd = if application_args.is_empty() { - Cmd::new(cmd!(shell, "docker run {image_name} {args}")) - } else { - Cmd::new(cmd!( - shell, - "docker run {application_args} {image_name} {args}" - )) - }; + let mut cmd = Cmd::new(cmd!( + shell, + "docker run --net=host -v {path_to_prover}/data/keys:/prover/data/keys -v {path_to_prover}/artifacts:/artifacts -v {path_to_configs}:/configs {application_args...} {image_name} {args...}" + )); cmd = cmd.with_force_run(); cmd.run().context(error) @@ -123,24 +128,17 @@ fn run_dockerized_component( fn run_binary_component( shell: &Shell, binary_name: &str, - application_args: String, - args: String, + application_args: &[String], + args: &[String], message: &'static str, error: &'static str, ) -> anyhow::Result<()> { logger::info(message); - let mut cmd = if application_args.is_empty() { - Cmd::new(cmd!( - shell, - "cargo run --release --bin {binary_name} -- {args}" - )) - } else { - Cmd::new(cmd!( - shell, - "cargo run {application_args} --release --bin {binary_name} -- {args}" - )) - }; + let mut cmd = Cmd::new(cmd!( + shell, + "cargo run {application_args...} --release --bin {binary_name} -- {args...}" + )); cmd = cmd.with_force_run(); cmd.run().context(error) } From 1b49611ce85ca9a2e37fc6de0d3eeb754640e845 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Fri, 6 Sep 2024 18:26:16 +0300 Subject: [PATCH 41/43] fix paths --- .../src/commands/prover/args/run.rs | 35 +++++++++++-------- .../zk_inception/src/commands/prover/run.rs | 3 +- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index 70d8f899d5f2..ff2381712548 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -80,24 +80,29 @@ impl ProverComponent { pub fn get_additional_args( &self, + in_docker: bool, args: ProverRunArgs, chain: &ChainConfig, ) -> anyhow::Result> { - let general_config = chain - .path_to_general_config() - .into_os_string() - .into_string() - .map_err(|_| anyhow!("Failed to convert path to string"))?; - let secrets_config = chain - .path_to_secrets_config() - .into_os_string() - .into_string() - .map_err(|_| anyhow!("Failed to convert path to string"))?; - - let mut additional_args = vec![ - format!("--config-path={}", general_config), - format!("--secrets-path={}", secrets_config), - ]; + let mut additional_args = vec![]; + if in_docker { + additional_args.push("--config-path=/configs/general.yaml".to_string()); + additional_args.push("--secrets-path=/configs/secrets.yaml".to_string()); + } else { + let general_config = chain + .path_to_general_config() + .into_os_string() + .into_string() + .map_err(|_| anyhow!("Failed to convert path to string"))?; + let secrets_config = chain + .path_to_secrets_config() + .into_os_string() + .into_string() + .map_err(|_| anyhow!("Failed to convert path to string"))?; + + additional_args.push(format!("--config-path={}", general_config)); + additional_args.push(format!("--secrets-path={}", secrets_config)); + } match self { Self::WitnessGenerator => { diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index 69f812b569fb..ac17b847711f 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -34,7 +34,7 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() let in_docker = args.docker.unwrap_or(false); let application_args = component.get_application_args(in_docker)?; - let additional_args = component.get_additional_args(args, &chain)?; + let additional_args = component.get_additional_args(in_docker, args, &chain)?; let (message, error) = match component { ProverComponent::WitnessGenerator => ( @@ -73,7 +73,6 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() if in_docker { let path_to_configs = chain.configs.clone(); - let ecosystem_config = EcosystemConfig::from_file(shell)?; let path_to_prover = get_link_to_prover(&ecosystem_config); run_dockerized_component( shell, From 1aec6657800aeaec49f3f86dc91360e002ef4aea Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:31:40 +0300 Subject: [PATCH 42/43] address comments --- zk_toolbox/crates/zk_inception/README.md | 4 +- .../src/commands/prover/args/init.rs | 2 +- .../src/commands/prover/args/run.rs | 40 ++++++++++++------- .../zk_inception/src/commands/prover/run.rs | 12 ++---- zk_toolbox/crates/zk_inception/src/consts.rs | 15 +++++++ .../crates/zk_inception/src/messages.rs | 1 + 6 files changed, 48 insertions(+), 26 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/README.md b/zk_toolbox/crates/zk_inception/README.md index 5eaf81a28f6e..904b1421e3a0 100644 --- a/zk_toolbox/crates/zk_inception/README.md +++ b/zk_toolbox/crates/zk_inception/README.md @@ -514,8 +514,8 @@ Run prover - `--threads ` -- `--max-allocation ` - in case you are running prover component, the value limits maximum memory - allocation of it. +- `--max-allocation ` - in case you are running prover component, the value limits maximum + memory allocation of it in bytes. ## `zk_inception prover init-bellman-cuda` diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs index 9d4e53320132..f2d6cae8f324 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/init.rs @@ -462,7 +462,7 @@ impl ProverInitArgs { fn fill_bellman_cuda_values_with_prompt(&self) -> anyhow::Result> { let init_bellman_cuda = if self.bellman_cuda_config.bellman_cuda_dir.is_none() { - PromptConfirm::new("Do you want to setup bellman-cuda?(You can do it later by running `zk_inception prover init-bellman-cuda`)").default(false).ask() + PromptConfirm::new("Do you want to setup bellman-cuda? (You can do it later by running `zk_inception prover init-bellman-cuda`)").default(false).ask() } else { true }; diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs index ff2381712548..751cc48074fe 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/args/run.rs @@ -4,9 +4,18 @@ use common::{Prompt, PromptSelect}; use config::ChainConfig; use strum::{EnumIter, IntoEnumIterator}; -use crate::messages::{ - MSG_ROUND_SELECT_PROMPT, MSG_RUN_COMPONENT_PROMPT, MSG_THREADS_PROMPT, - MSG_WITNESS_GENERATOR_ROUND_ERR, +use crate::{ + consts::{ + COMPRESSOR_BINARY_NAME, COMPRESSOR_DOCKER_IMAGE, PROVER_BINARY_NAME, PROVER_DOCKER_IMAGE, + PROVER_GATEWAY_BINARY_NAME, PROVER_GATEWAY_DOCKER_IMAGE, PROVER_JOB_MONITOR_BINARY_NAME, + PROVER_JOB_MONITOR_DOCKER_IMAGE, WITNESS_GENERATOR_BINARY_NAME, + WITNESS_GENERATOR_DOCKER_IMAGE, WITNESS_VECTOR_GENERATOR_BINARY_NAME, + WITNESS_VECTOR_GENERATOR_DOCKER_IMAGE, + }, + messages::{ + MSG_ROUND_SELECT_PROMPT, MSG_RUN_COMPONENT_PROMPT, MSG_THREADS_PROMPT, + MSG_WITNESS_GENERATOR_ROUND_ERR, + }, }; #[derive(Debug, Clone, Parser, Default)] @@ -44,23 +53,23 @@ pub enum ProverComponent { impl ProverComponent { pub fn image_name(&self) -> &'static str { match self { - Self::Gateway => "matterlabs/prover-fri-gateway:latest2.0", - Self::WitnessGenerator => "matterlabs/witness-generator:latest2.0", - Self::WitnessVectorGenerator => "matterlabs/witness-vector-generator:latest2.0", - Self::Prover => "matterlabs/prover-gpu-fri:latest2.0", - Self::Compressor => "matterlabs/proof-fri-gpu-compressor:latest2.0", - Self::ProverJobMonitor => "matterlabs/prover-job-monitor:latest2.0", + Self::Gateway => PROVER_GATEWAY_DOCKER_IMAGE, + Self::WitnessGenerator => WITNESS_GENERATOR_DOCKER_IMAGE, + Self::WitnessVectorGenerator => WITNESS_VECTOR_GENERATOR_DOCKER_IMAGE, + Self::Prover => PROVER_DOCKER_IMAGE, + Self::Compressor => COMPRESSOR_DOCKER_IMAGE, + Self::ProverJobMonitor => PROVER_JOB_MONITOR_DOCKER_IMAGE, } } pub fn binary_name(&self) -> &'static str { match self { - Self::Gateway => "zksync_prover_fri_gateway", - Self::WitnessGenerator => "zksync_witness_generator", - Self::WitnessVectorGenerator => "zksync_witness_vector_generator", - Self::Prover => "zksync_prover_fri", - Self::Compressor => "zksync_proof_fri_compressor", - Self::ProverJobMonitor => "zksync_prover_job_monitor", + Self::Gateway => PROVER_GATEWAY_BINARY_NAME, + Self::WitnessGenerator => WITNESS_GENERATOR_BINARY_NAME, + Self::WitnessVectorGenerator => WITNESS_VECTOR_GENERATOR_BINARY_NAME, + Self::Prover => PROVER_BINARY_NAME, + Self::Compressor => COMPRESSOR_BINARY_NAME, + Self::ProverJobMonitor => PROVER_JOB_MONITOR_BINARY_NAME, } } @@ -189,6 +198,7 @@ impl WitnessVectorGeneratorArgs { #[derive(Debug, Clone, Parser, Default)] pub struct FriProverRunArgs { + /// Memory allocation limit in bytes (for prover component) #[clap(long)] pub max_allocation: Option, } diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index ac17b847711f..d9e44404517a 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -16,8 +16,9 @@ use crate::messages::{ MSG_BELLMAN_CUDA_DIR_ERR, MSG_CHAIN_NOT_FOUND_ERR, MSG_MISSING_COMPONENT_ERR, MSG_RUNNING_COMPRESSOR, MSG_RUNNING_COMPRESSOR_ERR, MSG_RUNNING_PROVER, MSG_RUNNING_PROVER_ERR, MSG_RUNNING_PROVER_GATEWAY, MSG_RUNNING_PROVER_GATEWAY_ERR, MSG_RUNNING_PROVER_JOB_MONITOR, - MSG_RUNNING_WITNESS_GENERATOR, MSG_RUNNING_WITNESS_GENERATOR_ERR, - MSG_RUNNING_WITNESS_VECTOR_GENERATOR, MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, + MSG_RUNNING_PROVER_JOB_MONITOR_ERR, MSG_RUNNING_WITNESS_GENERATOR, + MSG_RUNNING_WITNESS_GENERATOR_ERR, MSG_RUNNING_WITNESS_VECTOR_GENERATOR, + MSG_RUNNING_WITNESS_VECTOR_GENERATOR_ERR, }; pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<()> { @@ -66,7 +67,7 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() } ProverComponent::ProverJobMonitor => ( MSG_RUNNING_PROVER_JOB_MONITOR, - MSG_RUNNING_PROVER_JOB_MONITOR, + MSG_RUNNING_PROVER_JOB_MONITOR_ERR, ), ProverComponent::Gateway => (MSG_RUNNING_PROVER_GATEWAY, MSG_RUNNING_PROVER_GATEWAY_ERR), }; @@ -108,11 +109,6 @@ fn run_dockerized_component( path_to_configs: &PathBuf, path_to_prover: &PathBuf, ) -> anyhow::Result<()> { - let spinner = Spinner::new(&format!("Pulling image {}...", image_name)); - let pull_cmd = Cmd::new(cmd!(shell, "docker pull {image_name}")); - pull_cmd.run().context(error)?; - spinner.finish(); - logger::info(message); let mut cmd = Cmd::new(cmd!( diff --git a/zk_toolbox/crates/zk_inception/src/consts.rs b/zk_toolbox/crates/zk_inception/src/consts.rs index 7db976c61033..72c8948a65d1 100644 --- a/zk_toolbox/crates/zk_inception/src/consts.rs +++ b/zk_toolbox/crates/zk_inception/src/consts.rs @@ -15,3 +15,18 @@ pub const EXPLORER_APP_DOCKER_IMAGE: &str = "matterlabs/block-explorer-app"; /// Path to the JS runtime config for the dapp-portal docker container to be mounted to pub const PORTAL_DOCKER_CONFIG_PATH: &str = "/usr/src/app/dist/config.js"; pub const PORTAL_DOCKER_IMAGE: &str = "matterlabs/dapp-portal"; + +pub const PROVER_GATEWAY_DOCKER_IMAGE: &str = "matterlabs/prover-fri-gateway:latest2.0"; +pub const WITNESS_GENERATOR_DOCKER_IMAGE: &str = "matterlabs/witness-generator:latest2.0"; +pub const WITNESS_VECTOR_GENERATOR_DOCKER_IMAGE: &str = + "matterlabs/witness-vector-generator:latest2.0"; +pub const PROVER_DOCKER_IMAGE: &str = "matterlabs/prover-gpu-fri:latest2.0"; +pub const COMPRESSOR_DOCKER_IMAGE: &str = "matterlabs/proof-fri-gpu-compressor:latest2.0"; +pub const PROVER_JOB_MONITOR_DOCKER_IMAGE: &str = "matterlabs/prover-job-monitor:latest2.0"; + +pub const PROVER_GATEWAY_BINARY_NAME: &str = "zksync_prover_fri_gateway"; +pub const WITNESS_GENERATOR_BINARY_NAME: &str = "zksync_witness_generator"; +pub const WITNESS_VECTOR_GENERATOR_BINARY_NAME: &str = "zksync_witness_vector_generator"; +pub const PROVER_BINARY_NAME: &str = "zksync_prover_fri"; +pub const COMPRESSOR_BINARY_NAME: &str = "zksync_proof_fri_compressor"; +pub const PROVER_JOB_MONITOR_BINARY_NAME: &str = "zksync_prover_job_monitor"; diff --git a/zk_toolbox/crates/zk_inception/src/messages.rs b/zk_toolbox/crates/zk_inception/src/messages.rs index cca3e3b549b1..557a16a75da9 100644 --- a/zk_toolbox/crates/zk_inception/src/messages.rs +++ b/zk_toolbox/crates/zk_inception/src/messages.rs @@ -311,6 +311,7 @@ pub(super) const MSG_GENERATING_SK_SPINNER: &str = "Generating setup keys..."; pub(super) const MSG_SK_GENERATED: &str = "Setup keys generated successfully"; pub(super) const MSG_MISSING_COMPONENT_ERR: &str = "Missing component"; pub(super) const MSG_RUNNING_PROVER_GATEWAY: &str = "Running gateway"; +pub(super) const MSG_RUNNING_PROVER_JOB_MONITOR_ERR: &str = "Failed to run prover job monitor"; pub(super) const MSG_RUNNING_PROVER_JOB_MONITOR: &str = "Running prover job monitor"; pub(super) const MSG_RUNNING_WITNESS_GENERATOR: &str = "Running witness generator"; pub(super) const MSG_RUNNING_WITNESS_VECTOR_GENERATOR: &str = "Running witness vector generator"; From a7bba2508201870ced944fa3ecba182737220cb5 Mon Sep 17 00:00:00 2001 From: Lech <88630083+Artemka374@users.noreply.github.com> Date: Mon, 9 Sep 2024 11:02:13 +0300 Subject: [PATCH 43/43] fix lint --- zk_toolbox/crates/zk_inception/src/commands/prover/run.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs index d9e44404517a..78116e40d6c7 100644 --- a/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs +++ b/zk_toolbox/crates/zk_inception/src/commands/prover/run.rs @@ -1,10 +1,7 @@ use std::path::PathBuf; use anyhow::{anyhow, Context}; -use common::{ - check_prerequisites, cmd::Cmd, config::global_config, logger, spinner::Spinner, - GPU_PREREQUISITES, -}; +use common::{check_prerequisites, cmd::Cmd, config::global_config, logger, GPU_PREREQUISITES}; use config::EcosystemConfig; use xshell::{cmd, Shell}; @@ -99,6 +96,7 @@ pub(crate) async fn run(args: ProverRunArgs, shell: &Shell) -> anyhow::Result<() Ok(()) } +#[allow(clippy::too_many_arguments)] fn run_dockerized_component( shell: &Shell, image_name: &str,