chore(gpu): update noise squashing parameters

This commit is contained in:
Agnes Leroy
2025-06-12 18:02:04 +02:00
committed by Agnès Leroy
parent 22ddba7145
commit e4d856afdf
6 changed files with 51 additions and 19 deletions

View File

@@ -178,8 +178,8 @@ mod cuda {
use tfhe::core_crypto::prelude::*; use tfhe::core_crypto::prelude::*;
use tfhe::shortint::engine::ShortintEngine; use tfhe::shortint::engine::ShortintEngine;
use tfhe::shortint::parameters::{ use tfhe::shortint::parameters::{
ModulusSwitchType, NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, ModulusSwitchType, NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
}; };
use tfhe::shortint::server_key::ModulusSwitchNoiseReductionKey; use tfhe::shortint::server_key::ModulusSwitchNoiseReductionKey;
@@ -191,8 +191,8 @@ mod cuda {
.measurement_time(std::time::Duration::from_secs(30)); .measurement_time(std::time::Duration::from_secs(30));
type Scalar = u128; type Scalar = u128;
let input_params = PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let input_params = PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let squash_params = NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; let squash_params = NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
let lwe_noise_distribution_u64 = DynamicDistribution::new_t_uniform(46); let lwe_noise_distribution_u64 = DynamicDistribution::new_t_uniform(46);
let ct_modulus_u64: CiphertextModulus<u64> = CiphertextModulus::new_native(); let ct_modulus_u64: CiphertextModulus<u64> = CiphertextModulus::new_native();

View File

@@ -1,5 +1,8 @@
pub(crate) use crate::core_crypto::algorithms::test::gen_keys_or_get_from_cache_if_enabled; pub(crate) use crate::core_crypto::algorithms::test::gen_keys_or_get_from_cache_if_enabled;
use crate::shortint::parameters::DynamicDistribution; use crate::shortint::parameters::{
DynamicDistribution, NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
};
use crate::shortint::prelude::{DecompositionBaseLog, LweDimension}; use crate::shortint::prelude::{DecompositionBaseLog, LweDimension};
use crate::core_crypto::algorithms::par_allocate_and_generate_new_lwe_bootstrap_key; use crate::core_crypto::algorithms::par_allocate_and_generate_new_lwe_bootstrap_key;
@@ -18,13 +21,9 @@ use crate::core_crypto::prelude::{
Plaintext, SignedDecomposer, UnsignedTorus, Plaintext, SignedDecomposer, UnsignedTorus,
}; };
use crate::shortint::engine::ShortintEngine; use crate::shortint::engine::ShortintEngine;
use crate::shortint::parameters::{ use crate::shortint::parameters::{ModulusSwitchType, NoiseSquashingParameters};
ModulusSwitchType, NoiseSquashingParameters,
NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
};
use crate::shortint::server_key::ModulusSwitchNoiseReductionKey; use crate::shortint::server_key::ModulusSwitchNoiseReductionKey;
use crate::shortint::ClassicPBSParameters; use crate::shortint::MultiBitPBSParameters;
use serde::de::DeserializeOwned; use serde::de::DeserializeOwned;
use serde::Serialize; use serde::Serialize;
@@ -74,7 +73,7 @@ pub fn generate_keys<
pub fn execute_bootstrap_u128( pub fn execute_bootstrap_u128(
squash_params: NoiseSquashingParameters, squash_params: NoiseSquashingParameters,
input_params: ClassicPBSParameters, input_params: MultiBitPBSParameters,
) { ) {
let glwe_dimension = squash_params.glwe_dimension; let glwe_dimension = squash_params.glwe_dimension;
let polynomial_size = squash_params.polynomial_size; let polynomial_size = squash_params.polynomial_size;
@@ -207,7 +206,7 @@ pub fn execute_bootstrap_u128(
#[test] #[test]
fn test_bootstrap_u128_with_squashing() { fn test_bootstrap_u128_with_squashing() {
execute_bootstrap_u128( execute_bootstrap_u128(
NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
); );
} }

View File

@@ -4,6 +4,8 @@ use crate::high_level_api::{
}; };
use crate::integer::U256; use crate::integer::U256;
use crate::set_server_key; use crate::set_server_key;
#[cfg(feature = "gpu")]
use crate::shortint::parameters::NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
use crate::shortint::parameters::{ use crate::shortint::parameters::{
NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
@@ -82,7 +84,7 @@ fn test_gpu_noise_squashing() {
let config = ConfigBuilder::with_custom_parameters( let config = ConfigBuilder::with_custom_parameters(
crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, crate::shortint::parameters::PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
) )
.enable_noise_squashing(NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128) .enable_noise_squashing(NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128)
.build(); .build();
let cks = crate::ClientKey::generate(config); let cks = crate::ClientKey::generate(config);
let sks = cks.generate_compressed_server_key(); let sks = cks.generate_compressed_server_key();

View File

@@ -5,6 +5,7 @@ use crate::shortint::parameters::{
}; };
use crate::shortint::parameters::current_params::key_switching::p_fail_2_minus_128::ks_pbs_gpu::V1_3_PARAM_MULTI_BIT_GROUP_4_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; use crate::shortint::parameters::current_params::key_switching::p_fail_2_minus_128::ks_pbs_gpu::V1_3_PARAM_MULTI_BIT_GROUP_4_KEYSWITCH_PKE_TO_SMALL_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
use crate::shortint::parameters::v1_3::V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
use current_params::classic::gaussian::p_fail_2_minus_128::ks_pbs::{ use current_params::classic::gaussian::p_fail_2_minus_128::ks_pbs::{
V1_3_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128, V1_3_PARAM_MESSAGE_2_CARRY_2_KS_PBS_GAUSSIAN_2M128,
V1_3_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128, V1_3_PARAM_MESSAGE_3_CARRY_3_KS_PBS_GAUSSIAN_2M128,
@@ -120,6 +121,10 @@ pub const NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:
NoiseSquashingCompressionParameters = NoiseSquashingCompressionParameters =
V1_3_NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128; V1_3_NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
pub const NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:
NoiseSquashingParameters =
V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128;
// GPU 2^-64 // GPU 2^-64
// GPU TUniform // GPU TUniform
pub const PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64: pub const PARAM_GPU_MULTI_BIT_GROUP_4_MESSAGE_1_CARRY_1_KS_PBS_TUNIFORM_2M64:

View File

@@ -1689,10 +1689,16 @@ pub const VEC_ALL_COMPACT_PUBLIC_KEY_ENCRYPTION_PARAMETERS: [(
]; ];
/// All [`NoiseSquashingParameters`] in this module. /// All [`NoiseSquashingParameters`] in this module.
pub const VEC_ALL_NOISE_SQUASHING_PARAMETERS: [(&NoiseSquashingParameters, &str); 1] = [( pub const VEC_ALL_NOISE_SQUASHING_PARAMETERS: [(&NoiseSquashingParameters, &str); 2] = [
&V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128, (
"V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128", &V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
)]; "V1_3_NOISE_SQUASHING_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128",
),
(
&V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128,
"V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128",
),
];
/// All [`NoiseSquashingCompressionParameters`] in this module. /// All [`NoiseSquashingCompressionParameters`] in this module.
pub const VEC_ALL_NOISE_SQUASHING_COMPRESSION_PARAMETERS: [( pub const VEC_ALL_NOISE_SQUASHING_COMPRESSION_PARAMETERS: [(

View File

@@ -38,3 +38,23 @@ pub const V1_3_NOISE_SQUASHING_COMP_PARAM_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M12
message_modulus: MessageModulus(4), message_modulus: MessageModulus(4),
carry_modulus: CarryModulus(4), carry_modulus: CarryModulus(4),
}; };
pub const V1_3_NOISE_SQUASHING_PARAM_GPU_MESSAGE_2_CARRY_2_KS_PBS_TUNIFORM_2M128:
NoiseSquashingParameters = NoiseSquashingParameters {
glwe_dimension: GlweDimension(1),
polynomial_size: PolynomialSize(4096),
glwe_noise_distribution: DynamicDistribution::new_t_uniform(30),
decomp_base_log: DecompositionBaseLog(24),
decomp_level_count: DecompositionLevelCount(3),
modulus_switch_noise_reduction_params: ModulusSwitchType::DriftTechniqueNoiseReduction(
ModulusSwitchNoiseReductionParams {
modulus_switch_zeros_count: LweCiphertextCount(2827),
ms_bound: NoiseEstimationMeasureBound(288230376151711744f64),
ms_r_sigma_factor: RSigmaFactor(20.83904137608219f64),
ms_input_variance: Variance(2.7596542105799535e-07f64),
},
),
message_modulus: MessageModulus(4),
carry_modulus: CarryModulus(4),
ciphertext_modulus: CoreCiphertextModulus::<u128>::new_native(),
};