Lazy Evaluation, 메모리 사용 및 계산을 최적화하기 위한 기법

Lazy Evaluation, 메모리 사용 및 계산을 최적화하기 위한 기법
Photo by Zhang Kenny / Unsplash

Lazy Evaluation

  • Lazy evaluation은 프로그램 실행 중에 표현식의 평가를 그 값이 실제로 필요할 때까지 미루는 기법
    • 프로그램에서 표현식의 결과가 필요하지 않다면, 해당 표현식의 계산을 미룹니다. 예를 들어, 조건문에서 특정 조건이 거짓으로 평가되어 다른 분기의 결과가 필요하지 않는 경우, 결과가 필요하지 않기 때문에 그 분기의 계산은 수행하지 않음
    • 주로 함수형 언어에서 언급된 개념이지만 Python에서도 사용할 수 있음
  • 한 번 계산된 결과는 저장되어, 같은 계산을 다시 요구할 때 재계산하지 않고 저장된 결과를 사용하여 반복적인 계산은 줄임
  • 메모리 사용을 최적화하고, 계산 시간을 절약하며, 무한 데이터 구조를 다룰 수 있게 해줌
  • Python에서는 기본적으로 엄격한 평가(eager evaluation) 전략을 사용
    • 즉, 표현식이 나타나는 즉시 계산이 이루어집니다.
  • Generator, iterator, 그리고 yield 키워드를 사용하여 Lazy evaluation을 구현할 수 있음
    • 필요할 때마다 값을 생성하므로 메모리 사용량을 크게 줄일 수 있어 큰 데이터셋을 다루거나 계산 비용이 높은 연산을 수행할 때 효율적

예시

Generator 사용 케이스

  • Count_up_to()는 최대값까지 숫자를 하나씩 생성하는 Generator
    • Yield를 이용해서, 다음 숫자가 필요할 때마다 생성
def count_up_to(max):
    count = 1
    while count <= max:
        yield count
        count += 1

counter = count_up_to(5)
for number in counter:
    print(number)

Iterator 사용케이스

  • List, Tuple, Dict 모두 iterable Object로 순회할 때 Iterator가 사용됨
  • Iterator는 iter()로 생성되고, next()를 통해서 다음 Element에 접근이 가능하다.
my_list = [1, 2, 3, 4, 5]
my_iter = iter(my_list)

print(next(my_iter))  # 1
print(next(my_iter))  # 2

Usage

  • 무한 시퀀스 생성: 무한한 자연수 시퀀스나, 피보나치 수열 생성시 메모리 제한 없이 원하는 요소를 구할 수 있음
  • 데이터 파이프라인: 복잡한 데이터 처리 작업을 수행할 때, 각 단계에서 전체 데이터셋을 처리하는 대신 필요한 데이터만 처리하여 다음 단계로 전달할 수 있음
  • 조건부 데이터 처리:데이터셋에서 특정 조건을 만족하는 요소만 필요한 경우, Lazy evaluation을 사용하여 해당 조건을 만족하는 요소가 발견될 때까지만 데이터를 처리할 수 있음

Eager Evaluation vs Lazy Evaluation

  • Lazy Evaluation을 사용할 때
    • 데이터 처리 파이프라인 구축시 데이터의 일부만 필요할 때
      • 무한 데이터 스트림 다룰 때 활용
    • 무한 시퀀스 처리시, 한 번에 모든 데이터를 처리할 필요가 없을 때
    • 성능 최적화가 중요한 상황: 계산 비용이 높거나 메모리 사용량을 최소화해야 하는 경우
  • Eager Evaluation을 사용할 때
    • 디버깅과 같이 프로그램 상태를 쉽게 추적하고 바로 진단해야 할 때
    • 계산 결과를 바로 사용해야 하는 경우요
      • 결과를 바로바로 활용해야 하는 경우
    • 프로그램의 복잡성을 줄이고, 코드의 가독성을 높이고자 할 때

Read more

[책] 생각하는 기계 - ‘황의 분노’와 OIALO, 한 엔지니어의 눈으로 본 리더의 두 얼굴

[책] 생각하는 기계 - ‘황의 분노’와 OIALO, 한 엔지니어의 눈으로 본 리더의 두 얼굴

처음 “생각하는 기계“라는 제목을 보았을 때, 젠슨황을 일컫는 말인 줄알았다. 보통은 유명할지라도 자서전을 읽는 것 자체를 그리 좋아하지는 않는 편이다. 그런데 누군가 이 책에 대해 평하길 “AI의 역사를 지근거리에서 볼 수 있다”라고 한 것을 보았다. 그래서 읽게 되었다. AI의 거대한 흐름을 기술의 관점으로는 지속해서 보고 있지만 구체적으로 왜

By Bongho, Lee
[책]Reshuffle: Who wins when AI restacks the knowledge economy

[책]Reshuffle: Who wins when AI restacks the knowledge economy

원래는 Amazon에 가서 Personal Knowledge Managment에 관한 책을 사려고 했다. Sketch Your Mind라는 책이었는데, 그 때 이 책 “Reshuffle”을 발견하였다. AI가 어떻게 Knowledge Economy를 흔들 것가? 라는 부제를 훑어보면서 저자가 쓴 다른 책을 보게 되었는데 거기에 내가 좋아했던 책을쓴 저자라는 것을 알게 되었다. 그래서 크게 고민하지 않고 구매를 하고

By Bongho, Lee
[책]올라운드투자, 누군가의 투자일기

[책]올라운드투자, 누군가의 투자일기

“올라운드 투자”라는 제목을 보았을 때는, “올라운드 플레이어”가 생각이 났다. “올라운드”라는 표현을 오랜만에 들어본 까닭이었다. 그럼에도 불구하고 이 책을 고른 것은 저자가 그간 보여준 컨텐츠에 대한 신뢰가 있던 까닭이었다. 컨텐츠를 다양하게 보는 편이지만 깊이가 아주 있지는 않았다. 여기서 깊이라 함은 기존 전문적인 정량적 분석의 내용의 수준을 말하는 것이다.

By Bongho, Lee
내가 놓치고 있던 미래, 먼저 온 미래를 읽고

내가 놓치고 있던 미래, 먼저 온 미래를 읽고

장강명 작가의 책은, 유학시절 읽고 처음이었다. 유학시절 "한국이 싫어서"라는 책은 동기부여가 상당히 되는 책이었다. 한국을 떠나 새로운 정채성을 학생으로서 Build up 해나가고 있던 상황에서 이 책은 제목부터 꽤 솔깃하였다. 물론 결말이 기억날 정도로 인상깊은 책은 아니었지만 말이다. 그렇게 시간이 흘러 장강명 작가의 책은 더 이상 읽지 않던

By Bongho, Lee