콘텐츠로 이동

엔진 생성

기본

Engine(mode: str = 'cpu', *, slot_count: int | None = None, use_bootstrap: bool = False, use_multiparty: bool = False, use_bootstrap_to_14_levels: bool = False, use_bootstrap_to_17_levels: bool = False, compact: bool = False, thread_count: int = 0, cuda_grid_size_multiplier: int = 4, device_id: int = 0)
연산을 실행할 엔진을 생성합니다.
  • 인풋:
    • mode: cpu, parallel, gpu, async gpu. parallel은 cpu 병렬 처리를 뜻함
    • slot_count: 암호화 단위 크기 지정
    • use_bootstrap: 부트스트랩 사용 여부
    • use_bootstrap_to_14_levels: 14 레벨 부트스트랩 사용 여부
    • use_bootstrap_to_17_levels: 17 레벨 부트스트랩 사용 여부
    • use_multiparty: 다자간 연산 사용 여부
    • compact: 고밀도 모드 사용 여부
      • 다자간 연산은 지원하지 않습니다.
    • thread_count: mode가 parallel이나 gpu일 때 스레드를 몇 개 사용할지 지정
    • cuda_grid_size_multiplier: mode가 gpu일 경우 CUDA 커널 호출 그리드 크기를 몇 배로 할 지를 지정
    • device_id: mode가 gpu일 경우 몇 번 gpu를 사용할지 지정
  • 아웃풋
    • Engine

하나의 엔진에서는 use_bootstrap, use_bootstrap_to_14_levels, use_bootstrap_to_17_levels, use_multiparty 옵션 중 하나만 사용할 수 있습니다.

from desilofhe import Engine

engine1 = Engine()
engine2 = Engine(mode="parallel", use_multiparty=True, thread_count=16)
engine3 = Engine(mode="gpu", use_bootstrap=True, thread_count=512, device_id=1)

최대 곱셈 횟수 지정

Engine(max_level: int, mode: str = 'cpu', *, use_multiparty: bool = False, compact: bool = False, thread_count: int = 0, cuda_grid_size_multiplier: int = 4, device_id: int = 0)

  • 인풋:
    • max_level: 최대 사용할 곱셈 횟수 지정
    • mode: cpu, parallel, gpu. parallel은 cpu 병렬 처리를 뜻함
    • use_multiparty: 다자간 연산 사용 여부
    • compact: 고밀도 모드 사용 여부
      • 다자간 연산은 지원하지 않습니다.
    • thread_count: mode가 parallel이나 gpu일 때 쓰레드를 몇 개 사용할지 지정
    • device_id: mode가 gpu일 경우 몇 번 gpu를 사용할지 지정
    • cuda_grid_size_multiplier: mode가 gpu일 경우 CUDA 커널 호출 그리드 크기를 몇 배로 할 지를 지정
  • 아웃풋
    • Engine
from desilofhe import Engine

engine1 = Engine(max_level=10)
engine2 = Engine(max_level=12, mode="parallel", thread_count=16)
engine3 = Engine(
    max_level=15, mode="gpu", use_multiparty=True, thread_count=512, device_id=1
)

슬롯 갯수 지정

Engine(*, slot_count: int, max_level: int, mode: str = 'cpu', *, use_multiparty: bool = False, compact: bool = False, thread_count: int = 0, cuda_grid_size_multiplier: int = 4, device_id: int = 0)

  • 인풋:
    • max_level: 최대 사용할 곱셈 횟수 지정
    • mode: cpu, parallel, gpu. parallel은 cpu 병렬 처리를 뜻함
    • slot_count: 암호화 단위 크기 지정
    • use_multiparty: 다자간 연산 사용 여부
    • compact: 고밀도 모드 사용 여부
      • 다자간 연산은 지원하지 않습니다.
    • thread_count: mode가 parallel이나 gpu일 때 쓰레드를 몇 개 사용할지 지정
    • device_id: mode가 gpu일 경우 몇 번 gpu를 사용할지 지정
    • cuda_grid_size_multiplier: mode가 gpu일 경우 CUDA 커널 호출 그리드 크기를 몇 배로 할 지를 지정
  • 아웃풋
    • Engine
from desilofhe import Engine

engine1 = Engine(slot_count=1024, max_level=10)
engine2 = Engine(
    slot_count=1024, max_level=12, mode="parallel", thread_count=16
)
engine3 = Engine(
    slot_count=1024,
    max_level=15,
    mode="gpu",
    use_multiparty=True,
    thread_count=512,
    device_id=1,
)

파라미터 지정

Engine(log_coeff_count: int, special_prime_count: int, mode: str = 'cpu', *, log_slot_count: int | None = None, use_multiparty: bool = False, compact: bool = False, thread_count: int = 0, cuda_grid_size_multiplier: int = 4, device_id: int = 0)

  • 인풋:
    • log_coeff_count: 암호문 계수 숫자의 log. 13~17 사이로 가능
    • special_prime_count: 키 스위칭을 할 때 하나의 파티션의 크기
    • mode: cpu, parallel, gpu. parallel은 cpu 병렬 처리를 뜻함
    • log_slot_count: 암호화 단위 크기의 log. 1~log_coeff_count-1 사이로 가능
    • use_multiparty: 다자간 연산 사용 여부
    • compact: 고밀도 모드 사용 여부
      • 다자간 연산은 지원하지 않습니다.
      • 다음 (log_slot_count, special_prime_count) 조합만을 지원합니다.
        • (13, 1), (14, 1), (15, 2), (16, 4)
    • thread_count: mode가 parallel이나 gpu일 때 쓰레드를 몇 개 사용할지 지정
    • device_id: mode가 gpu일 경우 몇 번 gpu를 사용할지 지정
    • cuda_grid_size_multiplier: mode가 gpu일 경우 CUDA 커널 호출 그리드 크기를 몇 배로 할 지를 지정
  • 아웃풋
    • Engine
from desilofhe import Engine

engine1 = Engine(log_coeff_count=14, special_prime_count=1)
engine2 = Engine(log_coeff_count=14, special_prime_count=1, log_slot_count=10)
engine3 = Engine(
    log_coeff_count=15, special_prime_count=2, mode="parallel", thread_count=16
)
engine4 = Engine(
    log_coeff_count=16,
    special_prime_count=4,
    mode="gpu",
    use_multiparty=True,
    thread_count=512,
    device_id=1,
)