대규모 머신러닝 시스템 디자인 패턴 - 14가지 패턴으로 분산 머신러닝 파이프라인 구축하기
위안 탕 지음, 정민정 옮김 / 한빛미디어 / 2024년 11월
평점 :
장바구니담기



이 서평은 출판사의 후원을 받아 작성하였습니다.

 

어떤 분야가 되었건 마찬가지겠지만, 머신러닝도 똑같이 실무에 가면 이런저런 문제에 부닥친다. 특히 단순히 머신러닝의 수학적 모델링에 관한 문제뿐 아니라, 서버나 다른 인프라 같은 문제들이 실무를 해야 하는 사람들에게 풀기 어려운 과제가 되곤 한다. 

 

풀기 어렵다는 말은 단순히 문제가 기술적인 측면에서 어렵다는 의미는 아니다.

물론 기술적으로 어렵다. 분산처리 시스템인데 당연히 어려울 수밖에 없다. 

 

하지만, 실무를 해야하는 곳이 분산처리 시스템을 운용해야할 만큼 규모가 큰 데이터를 다루는 곳이라면, 각 팀마다 R&R이 다를 것이고, 인프라를 다루는 팀이나 DBA나 각각 분리되어있고, PM 조직도 따로 있을 것이기 때문에 이들과의 소통 및 협업을 통해 원하는 것을 이끌어내야 한다는 점이 더 어려울 것이다. 

 

그렇기에 이 책은 ML을 실무로 하지 않는 나 같은 사람에게도 유용한 책일 수 있다.

 

이 책을 100% 이해할 필요가 없기 때문이다. 깊이 있는 MLOps는 잘 모르더라도, 대략적으로 어떤 용어를 어떤 개념으로 사용하는지, 어떻게 문제접근을 하는지 소통을 하기 위한 도구 정도로 생각하면서 읽어본다면, 컴퓨터 공학적 지식도 쌓으면서 인프라와 ML 모두에 가까워질 수 있다. 물론 쉽진 않겠지만 말이다.

 

 

 

 

 

밑줄긋기

 

p.51

넘파이 배열 형태로 메모리에 올라가있던 Fashion-MNIST 데이터셋을 텐서플로의 from_tensor_slices() API를 사용해 tf.Dataset 객체로 변환했다. 이 과정에서 넘파이 배열은 메모리상에 여러 번 복사되었고, 결과적으로 tf.GraphDef의 메모리 제한값인 2GB에 다다르면서 메모리 에러가 발생했다. 즉, 이런 방식으로는 이보다 큰 데이터셋은 사용할 수 없다.

 

이런 문제는 텐서플로와 같은 프레임워크를 사용하다보면 흔히 발생할 수 있다. 해결책은 간단하다. 이런 패턴은 텐서플로의 성능을 최대로 활용하지 않는 패턴이므로, 더 큰 데이터셋을 사용하기 위해서는 전체 데이터셋을 메모리에 모두 올리지 않고 사용할 수 있는 다른 API를 사용해야 한다. 

 

예를들어 tensorflow_io는 기본 텐서플로가 제공하지 않는 파일 시스템이나 파일 포맷 등과 관련된 기능을 모아놓은 라이브러리이다. 아래 코드와 같이 tfio.IODataset.from_mnist()를 이용하면 MNIST 데이터셋을 로컬 디스크에 저장하지 ㅇ낳고 바로 메모리에 올릴 수 있다. 이는 tensorflow_io가 내부적으로 HTTP 파일 시스템을 사용하기 때문이다.

 

import tensroflow_io as tfio

dataset_url = "https://storage.googleapis.com/cvdf-datasets/mnist/"
d_train = tfio.IODataset.from_mnist(
    dataset_url + "train-images-idx3-ubyte.gz"
    dataset_url + "train-labels-idx1-ubyte.gz"
   )

 

p.54~55

배치 처리를 수행하기에 앞서 고려해야 하는 사항이 있다. 이 방식은 데이터셋을 스트리밍 방식으로 전체 데이터셋의 일부로 학습을 실행할 수 있는 수학적 연산이나 알고리즘에만 적용할 수 있다. 다시 말해 알고리즘 학습을 위해 전체 데이터셋을 한 번에 학습하는 것이 필요하다면 배치 처리를 사용할 수 없다. 예를 들어 학습을 위해 특정 피처의 총합을 알아야 하는 알고리즘이라면 배치 처리는 실행 가능한 방법이 아니다. 전체 데이터셋의 부분 집합으로는 해당 정보를 얻을 수 없기 때문이다. 머신러닝 연구자나 실무자가 Fashion-MNIST에 대해 더 나은 성능과 정확도를 얻고자 다양한 머신러닝 모델을 사용한다고 가정해보자. 이때 어떤 알고리즘이 모델의 파라미터를 업데이트하기 위해 각 클래스마다 최소 10개의 데이터를 필요로 한다면, 배치 처리는 적절한 방법이 아니다. 모든 미니배치에 각 클래스별로 항상 최소 10개의 데이터가 포함되는 것이 아니기 때문이다. 특히 배치 크기가 작다면 더욱 그렇다. 극단적인 예시로 배치 크기가 10인 경우를 생각해보자. 모든 미니배치에 각 클래스의 데이터가 최소 하나씩 포함되는 경우, 즉 10개 클래스의 데이터를 모두 한 장씩 포함한 10장이 구성되는 경우는 매우 드물 것이다.

 

기억해야 할 또 다른 점이 있다. 머신러닝, 특히 딥러닝 모델을 학습시킬 때 적절한 배치 크기는 자원을 얼마나 사용할 수 있느냐에 따라 크게 달라진다는 것이다. 특히 공유 자원 환경(shared-resource environment)이라면 배치 크기를 결정하는 것이 더욱 어려워진다. 머신러닝 학습에서 자원을 얼마나 효율적으로 활용하는지는 모델의 구조뿐만 아니라 배치 크기에도 달려 있다. 이렇게 자원과 배치 크기 사이의 상호 의존성은 머신러닝 실무자가 작업을 효율적으로 실행하고 자원을 활용하기 위해 고려해야 하는 것들을 더욱 복잡하게 만든다. 

 

다행히도 배치 크기를 자동으로 최적화해주는 알고리즘과 프레임워크가 있다. 예를 들어 AdaptDL(https://github.com/petuum/adaptdl)을 사용하면 자동으로 배치 크기를 조절하여 효율적으로 분산학습을 할 수 있다. 이 프레임워크는 학습 과정에서 시스템 성능과 그레이디언트 노이즈 스케일을 측정하여 가장 효율적인 배치 크기를 선택한다. 

 

p.58

배치 처리 방식은 모델을 배치별로 순차적으로 학습시킬 충분한 시간이 있는 경우에만 괜찮은 방법일 수 있다. 그러나 실제 애플리케이션을 개발하기 위해서는 더 효율적으로 모델을 학습시키는 방법이 필요하다. 

 

p.60

큰 데이터셋을 여러 개의 작은 조각으로 나누어 여러 워커에 분산시키는 프로세스를 샤딩(sharding)이라고 하며, 이러한 작은 데이터 조각을 데이터 샤드(data shard)라고 한다.

 

p.61

샤드는 본질적으로 전체 데이터셋의 일부를 포함하도록 분할하는 수평 데이터 분할 (horizontal data partition)이며, 가로 분할이라고도 한다. 

 

p.63

수동 샤딩의 가장 큰 문제는 샤드가 균일하지 않게 할당될 수 있다는 점이다. 샤드의 크기가 균일하지 않으면 문제가 발생할 수 있다. 일부 샤드는 과도하게 커져 과부하가 걸리는 반면, 다른 샤드는 지나치게 작아 워커의 자원이 낭비될 수 있다. 이러한 불균형은 여러 개의 워커로 모델을 학습시키는 프로세스가 지연되는 원인이 된다. 

 

p.64~65

한 샤드에 너무 많은 데이터가 들어가게 되면 속도가 느려지거나 서버에 과부하가 걸릴 수 있으므로 피하는 것이 좋다. 이 문제는 전체 데이터셋을 너무 적은 수의 샤드에 강제로 분산시키는 경우에 발생할 수 있다. 개발 환경 혹은 테스트 환경에서는 시도해도 큰 문제가 되지 않지만, 프로덕션 환경에서 사용하기에는 이상적이지 않다. 

 

또한 데이터셋에 새로운 데이터가 업데이트될 때마다 수동으로 샤딩을 진행하는 것은 운영 비용이 클 뿐만 아니라 복잡도 또한 높아진다. 데이터 유실을 방지하기 위해 여러 개의 워커가 전부 백업되어야 하며, 데이터 마이그레이션 혹은 스키마 변경이 일어나는 경우 모든 샤드가 동일한 스키마 복사본을 유지하는 것 또한 보정되어야 한다. 

 

이러한 문제를 해결하기 위해 수동 샤딩 대신 알고리즘을 기반으로 하는 자동 샤딩을 사용할 수 있다. 예를 들어 해시 샤딩(hash sharding)은 데이터 샤드의 키값으로 해시를 생성한다. 생성된 해시값은 각 데이터가 속할 샤드를 결정한다. 균일한 해싱 알고리즘을 사용한다면 해시 함수가 데이터를 서로 다른 워커에 고르게 분산시킬 것이므로 위에서 언급한 문제를 줄일 수 있다. 또한 비슷한 데이터가 같은 샤드에 배치될 가능성도 낮아진다. 

 

샤딩 패턴은 매우 큰 데이터셋을 여러 데이터 샤드로 나누어 여러 워커에 분산시키고, 각 워커가 개별 데이터 샤드를 독립적으로 사용함으로써 성능을 크게 높인다. 이 방법을 활용하면 배치 처리가 순차적으로 모델을 학습시킴으로써 생기는 지연을 피할 수 있다. 배치와 샤딩 패턴은 전체 데이터셋을 모두 사용하면서 모델 학습 프로세스를 향상시킨다. 다만, 전체 데이터셋을 여러 번 사용해야 하는 머신러닝 알고리즘과 같은 경우에는 배치 및 샤딩을 두 번 이상 수행해야 한다.

 

p.66

트리 기반 알고리즘이나 딥러닝 같은 현대의 머신러닝 알고리즘은 대부분 여러 에포크에 걸친 학습이 필요하다. 1 에포크란 전체 데이터셋을 모두 사용하는 한 번의 주기를 의미한다. 즉, 데이터셋에 포함된 모든 데이터를 최소 한 번씩 전부 사용해서 학습을 진행하는 단위다. 

 

p.68~69

머신러닝 모델을 여러 에포크에 걸쳐 학습시키는 데 비현실적으로 많은 시간이 든다면 어떤 방법으로 개선할 수 있을까? 첫 번째 에포크는 말 그대로 머신러닝 모델이 전체 데이터셋을 처음 사용해서 학습하는 단계이기 때문에 할 수 있는 방법이 거의 없다. 하지만 두 번째라면 어떨까? 모델이 이미 데이터셋을 한 번은 사용했다는 점을 활용해 볼 수 있지 않을까?

 

모델 학습에 사용하는 노트북이 충분한 연산 자원과 메모리, 저장 공간을 가지고 있다고 가정해보자. 머신러닝 모델이 학습 데이터를 메모리에 올려서 사용했다면 나중에 학습할 때 디스크에서 메모리로 올리는 작업을 반복하는 대신 데이터를 메모리에 유지시키는 방법이 있다. 다른 말로 하면 학습 데이터를 캐싱(caching)해놓는 것이다. 데이터가 디스크 대신 메모리에 유지된다면 해당 데이터에 다시 접근하는 것은 훨씬 빨라진다. 

 

p.70~71

캐싱 패턴을 활용하면 모델 학습 과정에서 동일한 데이터셋을 반복적으로 가져오느라 낭비되는 시간을 크게 줄일 수 있다. 캐싱의 또 다른 장점은 머신러닝 파이프라인에서 예상치 못한 오류가 발생했을 때 캐시에 저장된 데이터를 재활용할 수도 있다는 점이다.

 

p.72

일반적으로, 보다 견고하고 안정성이 요구되는 시스템이 필요한 상황이라면 디스크 캐시를 사용하고, 속도나 시간 비용을 줄이는 것이 더 중요한 상황이라면 인메모리 캐시를 사용하는 편이 좋다. 특히 디스크 캐시는 원격 데이터베이스로부터 데이터를 가져와서 사용할 때 매우 유용하다. 네트워크 통신은 매우 느리고 때로는 불안정한 경우도 있기 때문이다. 

 

p.87

머신러닝 엔지니어 혹은 DevOps 엔지니어는 파라미터 서버 패턴을 구성할 때 파라미터 서버와 워커를 각각 몇 대씩, 혹은 어떤 비율로 구성할지 결정하는 데 어려움을 겪을 수 있다. 워커가 계산한 그레이디언트뿐만 아니라 파라미터 서버에 있는 최신 모델 파티션을 주고받는 것까지 고려한다면 워커와 파라미터 서버 간 발생하는 통신 비용은 적지 않다. 모델이 더욱 커서 파라미터 서버의 수가 더 늘어난다면 각 워커에서 실행되는 연산에 비해 통신 비용이 막대해지는 경우가 생길 수도 있다. 



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
머니스톰 - 40년 만에 찾아온 부의 변곡점
김한진.송주연 지음 / 페이지2(page2) / 2024년 2월
평점 :
장바구니담기


 

 

통화주의 관점에서 경제 입문서라고 해도 좋을만한 책이다.

 

어찌보면 굉장히 보수적인 관점이라고 볼 수도 있겠지만, 그럼에도 불구하고 지금같은 인플레이션 시기에는 귀기울여 들어봐야 하는 관점이기도 하다. 물론 그렇다고 해서 통화주의가 무조건 답인건 아니겠지만 말이다.

 

거시경제에 대한 책이 늘 그렇듯, 책 전반부를 읽다보면 내 잘못도 아니고 파월 의장의 잘못이거나 누군가의 잘못인데 왜 저 멀리 살고 있는 나까지 피해를 봐야 하는가 라는 생각이 들기도 한다. 하지만 이런 상황을 바꿀 순 없다. 언제나 이런 거시경제적 상황은 통제할 수 없는 외생변수로 남아있을 것이기 때문이다. 

 

그렇기에 이런 책을 읽는 목적은 변하는 외생변수에 맞춰 내가 통제할 수 있는 변수를 통제하는 것. 비가 올 때 우산을 쓰고 담벼락 아래로 비를 피하듯, 상황을 이해하고 그에 맞게 행동할 수 있게 되는 것이다. 

 

그나저나 좋은 내용이지만, 읽더라도 비관적인 관점을 피하기는 그리 쉽지 않은 듯 하다. 

언제쯤 이 비가 그칠지 모르겠지만, 언젠가 겨울이 가고 봄이 오듯 조금 더 따뜻한 때가 오지 않을까 기대해본다.

 

 

 

p.38~41

연준이 인플레이션 파이터로 나섰을 때는 1960년대 베트남 전쟁과 1970년대 두 차례의 석유파동을 겪으면서 그야말로 미친 인플레이션이 찾아왔을 때였다. 바로 이 시기에 연준의 존재감이 급부상했다. 1961년 1%대에 머물렀던 미국의 기준금리는 1972년 초 3.3%를 거쳐 1981년에는 무려 20%까지 올랐다. 1970년대 끔찍한 하이퍼 인플레이션을 경험했던 탓인지 연준은 돈을 얼마든지 풀 수 있는 권한을 가졌음에도 불구하고 1980년대 내내 높은 금리를 유지하며 신중한 정책 스탠스를 견지했다.

 

물론 1980년대 중반까지 경제성장과 함께 통화량 자체는 꾸준히 늘었지만 국내총생산(GDP) 대비 총통화(M2)의 상대 비율은 여전히 50~60%대에 머물고 잇었는데, 이는 이 시기에 통화정책이 비교적 중립적이고 신중했음을 시사한다. 1987년부터 2000년까지는 미국경제가 매우 안정된 성장을 보인 국면이었는데 이 기간 중 연준의 기준금리는 세 차례나 인상됐고 GDP 대비 통화량은 계속 낮아졌다. 이후 닷컴버블이 붕괴되자 연준은 경기 부양을 위해 기준금리를 2003년 1% 까지 큰 폭으로 내렸다. 그 전에 금리를 올려놨기 때문에 내릴 수 있는 버퍼(완충장치)가 있었다. 하지만 이때까지만 해도 연준은 물가 안정에 초점을 두며 신중한 통화정책을 펼쳤다.

 

문제는 그다음 2008년 글로벌 금융위기 이후부터였다. 연준은 위기를 수습하기 위해 재빨리 금리를 내리는 동시에 시중에 유동성을 과감히 공급했다. 2008년 말부터 2010년 초까지 늘어난 미국의 총통화는 약 1조 2,000억 달러였는데 1913년부터 2008년까지 약 100년간 증가한 총통화가 1조 달러였으니 이보다 더 많은 통화가 불과 1년 3개월 만에 풀린 셈이다. 1년 남짓한 이 기간 중 미국의 본원통화는 2배나 늘었고 이렇게 한번 고삐 풀린 통화는 그 이후에도 쭉쭉 늘어났다. 연준의 행보에 뭔가 큰 변화가 생긴 시기였다. 

 

그런데 특이한 점이 있다. 연준은 달러를 새로 찍어 특별히 지정한 24곳의 거대 은행 금고에 넣는 방식으로 통화를 풀었는데 은행 시스템이 보유한 초과 지급준비금이 2008년 금융위기 전 20억 달러에서 2010년 2월에는 약 1조 2,000억 달러로 600배나 증가했다. 은행 시스템에 천지개벽이 일어난 것이다. 은행에 쌓여 있는 초과 지급준비금은 장기간 초저금리(일부 다른 국가는 마이너스 기준금리)와 만나 시중 통화량 증가로 이어졌을 뿐만 아니라, 다양한 인플레 요인들과 만나며 물가를 자극해왔다. 넓게 보면 연준이 통화를 광적으로 푼 시기는 2000년 닷컴버블 붕괴 이후 최근까지 약 20여 년간으로 볼 수 있는데 그렇게 쌓여온 통화량은 경제와 자산시장 전반에 상당한 영향을 주고 있는 것으로 추정된다.

 

이렇게 미국의 총통화는 2000년 초 4조 6,000억 달러에서 꾸준히 늘어나 2022년 말에는 21조 달러를 넘어섰다. 세계경제와 금융의 중심지인 미국에서만 지난 20여 년간 달러가 약 5배 풀린 것이다. 문제는 지난 20년간 늘어난 총통화의 무려 3분의 1이 2020년 팬데믹 이후 3년도 채 안 된 시기에 증가했다는 점이다. 

 

이런 현상은 미국에만 국한된 얘기가 아니다. 유로존도 2000년 60.7%에 불과하던 GDP 대비 총통화 비율이 2008년 초까지는 82.3%로 높아졌고 이후 코로나 대유행을 거치면서 2021년 5월에는 123.1%까지 치솟았다. 

 

p.53

일본중앙은행(BOJ)은 2011년 동일본 대지진 등으로 경제가 어려움에 빠지자 2013년 1월부터 매월 13조 엔 규모의 국채 매입을 실시하고 물가 상승률 목표치 2%로 상향 조정하는 양적완화 정책을 강화했다. 아베노믹스와 함께 시작된 YCC정책(수익률곡선 제어정책)은 중앙은행이 장기 금리 목표를 달성하기 위해 채권을 매수 또는 매도하는 정책을 말한다. 코로나19 회복 과정에서 물가가 급등하자 미국 등 주요 중앙은행은 금리를 인상했으나, 일본은행은 여전히 완화적 통화정책을 유지하고 있다. 다른 국가보다 낮은 인플레이션으로 여전히 경기 부양의 필요성을 안고 있기 때문이다. 그러나 미국과의 금리 격차가 커지면서 엔화의 평가절하 압력이 확대되자 일본은행은 2022년 12월 국채금리 변동폭을 기존 +/- 0.25% 정도에서 +/- 0.5% 정도로 확대했다. 이후 2023년 7월, BOJ는 금리 변동폭 상한선을 0.5%로 유지하되 어느 정도 초과 변동을 용인하겠다고 밝혔다. 시장은 이를 BOJ가 장기금리 상승을 일부 허용하고 YCC 출구전략을 밟기 시작했다는 신호로 받아들이고 있다. 

 

p.57

생산성 저하 이면에 좀비기업이 있었다는 연구 결과가 많다. 국제결제은행(BIS)의 통화경제국장 보리오(Borio)는 저금리가 투자 부진과 생산성 저하로 이어진다는 사실을 규명하면서 좀비기업 점유율과 정책 금리 하락 사이의 밀접한 상관관계를 발견했다. 즉, 저금리는 좀비를 낳고 좀비는 저금리를 낳는다는 것이다. (출처 : [금리의 역습], 에드워드 챈슬러, 임상훈 옮김)




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
세계 최고의 기업은 어떻게 위기에 더 성장하는가 - 결국 이기는 기업의 경영 원칙
리즈 호프먼 지음, 박준형 옮김 / 포레스트북스 / 2024년 2월
평점 :
장바구니담기


 

빌 애크먼을 좋아하든 좋아하지 않든 이 책은 코로나 시국에서 살아남기 위해 사람들이 어떻게 했는지 엿볼 수 있는 역사자료 같은 책이다. 마치 2008년 위기 상황을 추적하는 책이 있듯, 이 책 또한 역사적인 위기 속에서 기업들은, 그리고 사람들은 어떤 생각을 가졌고, 어떤 상황을 맞았는지 추적해 나간다. 

 

그렇기에 책 제목은 그리 적절한 제목이 아니라고 생각이 들었다. 책 제목만 보면 마치 경영전략서적처럼 보이지만, 실상은 그렇지 않기 때문이다. 어떻게 해야 한다보다도 어떤 상황이었다라는 사실 묘사가 이 책의 가장 중요한 목적이기 때문이다. 

 

그리 먼 옛날 이야기는 아니기에, 책을 읽다보면 시간대가 나올 떄마다 이때 나는 어떤 걸 하고 있었고, 정부 정책은 어떠했는지 회상을 하며 읽었다.

 

 

 

p.80~81

2015년에 델타 항공은 중국 내 기반을 강화하고 정부에 자사의 의도를 증명하기 위하여 중국의 3대 항공사 중 하나인 차이나 이스턴의 지분을 약간 매입하기 위하여 4억 5,000만 달러를 투자했다. 하인스타인은 너무 빠른 조치 때문에 중국 내에서 델타 항공의 계획이 피해를 입을 것이라고 경고한 것이었다. 또한 바이러스의 위세가 생각보다 약할 수도 있었다. 미국 정부가 항공 스케쥴을 취소하도록 명령한다면 따르면 되지만, 델타 항공사가 자발적으로 모든 항공 스케쥴을 취소한다면 중국 내 입지를 강화할 때 승인을 받아야 할 관리들의 눈길이 곱지 않을 것이다. 하인스타인은 바스티안에게 모든 가정을 고려하도록 부드럽게 권하고 있었다.

 

"지금 상황에서 당신이라면 중국행 비행기를 조종하고 싶나요?" 바스티안이 눈을 가늘게 뜨면서 물었다. 승객들은 국제선으로 여행하는 위험에 대한 가치를 판단할 수 있었다. 하지만 델타 항공의 조종사들과 승무원들에게는 이동을 거부할 선택권이 없었다. 게다가 바스티안은 정부가 항공사에게 중국으로 가는 항공기를 취소하도록 명령한다면, 남보다 앞서 나가는 것이 가치가 있다고 덧붙였다.

 

스티브 시어는 마침 술잔을 들고 주위를 배회하던 페리 칸타루티에게 "지금 델타 항공의 중국 스케줄이 전면 취소된 것 같다"고 말했고, 칸타루티는 어리둥절했다.

 

그의 결정은 며칠 후 발표되었고, 유나이티드 항공과 아메리칸 항공 모두 같은 정책을 발표했다. 치열하게 경쟁하고 있는 미국의 3대 항공사들이 모두 같은 결정을 내렸다는 사실은 당시의 두려움이 얼마나 극에 달했는지를 보여주는 것이었다. 경쟁사가 물러났을 때를 시장점유율을 확대하는 기회로 삼을 상황이 아니었다.

 

p.89

와츠는 2011년 일본 후쿠시마 대지진 이후 처음으로 아시아 전역에서의 대응을 위해 힐튼 경영자들로 구성된 위기 대책반을 조직했다. 중국의 국영 매체가 발표하는 확진자 정보는 믿을 수 없었다. 그보다 얼마나 신속하게 비즈니스가 증발해 버리는지 추측하기 위해서 국제 항공기 스케쥴의 취소 상황을 확인하고, 지방정부에 의하여 폐쇄된 수십 개의 호텔을 확인하는 편이 더욱 확실한 데이터를 제공했다.

 

p.137

상업용 어음, MMF, 환매조건부채권(repos) 등 세 가지 금융시장은 금융 경색을 알리는 조기 신호로 여겨진다. 광산의 카나리아 같은 존재들이다. 이들 시장은 단기 차입과 관련이 있으며, 종종 투자자들의 실시간 감정을 반영하고, 더 중요한 시장의 움직임을 예고한다.

 

p.138

역사적으로 미국의 연방준비제도는 다른 중앙은행과 마찬가지로 개인 소비자의 주택담보대출부터 기업 대출까지 모든 대출의 기준이 되는 단일 기준 금리를 설정한다. 그런데 2008년에 역사상 최초로 금리를 제로까지 낮춰야 하는 어려움을 피하기 위해 0에서 0.25%까지로 금리의 범위를 설정했다. 경기가 회복한 이후, 연방준비제도는 해당 기준금리를 높이기 시작하면서 범위를 유지했다.

 

p.146~147

힐튼은 세계에서 가장 큰 호텔 기업에 속했지만, 실제로는 많은 호텔을 소유하고 있지 않다. 2007년에 최고경영자로 취임한 나세타는 10년 전 메리어트가 그랬듯이 단순한 브랜딩과 소유자에 대한 서비스를 강조하는 전략을 채택했다. 간단히 말해 물리적인 건물을 소유하는 부담을 다른 사람에게 양도하고, 그들에게 디자인이나 개발 및 경우에 따라 관리를 제공하면서 안정적인 수수료를 받았다. 메리어트는 1996년에 호텔 자산의 일부를 호스트라는 회사로 분할했고(나세타는 한때 호스트를 경영했다), 2011년에는 타임쉐어 사업(이용 기간에 맞는 오너십을 구매하면 지정된 리조트와 체인 리조트를 사용할 수 있도록 하는 방식 - 역자 주)에서도 같은 방식을 적용했다. 이 방식은 회사의 자본을 새로운 브랜드와 이니셔티브에 재투자할 수 있게 해주었기 때문에 월스트리트의 환영을 받았다.

 

2017년에 힐튼은 자사 호텔 중 절반을 파크 리조트(Park Resorts)라는 새로운 기업으로 분할했다. 휴가 예약과 타임쉐어 사업은 46개의 리조트를 가지고 있으면서 포인트 기반의 리워드를 제공하는 힐튼 그랜드 배케이션즈(Hilton Grand Vacations)라는 새로운 기업으로 변경되었다. 여러 면에서 변화된 힐튼은 이제 부동산 회사가 아니었다. 나세타의 말에 의하면 힐튼은 소비자 경험의 제공자였으며, 부동산을 소유하는 위험(막대한 대출, 지역 정부 관계자의 간섭, 물이 새는 수도꼭지 등)을 다른 사람들에게 맡기고, 자신의 브랜드, 객실 예약 소프트웨어, 심지어 자체 키 카드 기술의 사용을 통해 안정적인 수수료를 받았다. 

 

월스트리트 용어로 일종의 '자산 경량화'였다. 힐튼은 월도프 아스토리아와 더블트리를 포함한 18개의 브랜드로 운영되는 호텔들을 실질적으로 소유하고 있는 부동산 투자회사로부터 수익의 일부(8%부터 최대 20%까지)를 받아 돈을 벌었다. 평균적으로 힐튼이 벌어들이는 돈은 약 2,500만 달러였고, 그 중 2,000만 달러를 고정경비, 급여, 기타 운영에 지출했다.

 

그런데 이제 힐튼의 수익이 빠르게 사라지고 있었다. 하지만 세금, 공과금, 수천 명 직원들의 급여, 그리고 자체적으로 소유하거나 관리하는 60여 개 호텔의 유지비와 직원들의 급여 등 고정비를 지출해야 했다.

 

p.163~164

신용부도스와프는 금융계의 보험과 비슷하다고 회자되지만, 중요한 차이점이 하나 있다. 그들이 보호하려는 사건이 발생하지 않더라도, 다시 말해 채무자가 채무 불이행을 선언하지 않더라도 돈을 벌 수 있다는 것이다. 신용부도스와프는 채무 불이행이 발생할 가능성만 있어도 그 자체로 돈을 벌 수 있는 금융 투자 상품이었다. 내재된 채무, 이 경우 회사채의 가치가 하락하면 신용부도스와프를 팔아 수익을 남길 수 있었다. 퍼싱 스퀘어가 배팅해서 돈을 벌려면 시장이 공포에 질리기만 하면 되었다.

 

투자자들이 기업에 빚을 갚을 돈이 없을지도 모른다고 우려하게 되면서 회사채 가격은 급락했다. 금융 서비스 기업인 블룸버그와 투자은행 바클레이스가 제공하는 회사채 기준 지수는 3월 초 최고를 기록했으나, 3월 20일이 되자 15%나 하락했다. 퍼싱 스퀘어의 투자는 장부상 20억 달러 이상의 가치를 갖게 되었다.

 

투자자라면 누구나 기뻐할 만한 막대한 수익이었다. 하지만 신용부도스와프의 가치가 크게 상승하는 동안, 퍼싱 스퀘어 투자의 상당 부분을 차지하는 애크먼의 주식 포트폴리오는 4분의 1 이상의 가치를 잃고 말았다.

 

3월 첫 번째 금요일이 되자, 신용부도스와프는 퍼싱 스퀘어 자산의 40%를 차지하게 되었다. 완전히 균형이 깨진 포트폴리오가 된 것이다. 게다가 연방준비제도는 회사채를 보증하여 가격을 안정시키고, 투자자들을 달래기 위해 회사채를 매수하는 방식으로 시장의 안정을 위해 개입하려고 했다. 연방준비제도가 어떤 조치를 취하든 회사채 가격은 반등할 것이고, 퍼싱 스퀘어가 보유하고 있는 20억 달러가 넘는 장부상 이익은 상당 부분 사라지게 될 위기였다. 3월 6일, 단 하루 만에 퍼싱 스퀘어의 신용부도스와프의 장부 가치는 8억 달러나 하락했다. 여전히 상당한 수익이었지만, 불안정하다고 판단한 애크먼은 트레이더들에게 매도 포지션을 구축하라고 지시했다.

 

p.166

역사는 탈레브의 블랙스완 이론에 대한 설명에 네 번째 기준을 추가할지도 모른다. 운과 배짱을 가지고 이후에는 당연하게 여겨지게 될 사건을 미리 예측한 사람들은 매우 드물지만 어마어마한 수익을 벌 수 있다는 기준이다. 



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
된다! 맥북 & 아이맥 : 맥OS 소노마 판 - 한 시간이면 초보 뗀다! 빨리 익혀 바로 들고 나가자! 된다! 업무 능력 향상 200%
쌤쌤티비.케이트 지음 / 이지스퍼블리싱 / 2024년 1월
평점 :
구판절판


 

맥북을 처음 사용하는 사람이든 아니면 사용을 해본 사람이든 아마 이 책을 보면 최소한 1개 이상의 팁은 얻을 거라고 생각한다.

 

업무를 하면서 맥북을 사용하곤 했지만, 여기 책을 보다보니 그동안 활용하지 못한 기능 몇 개를 발견하고 덕분에 조금 더 내가 원하는 대로 환경설정을 할 수 있었다. 

 

이 책은 그 용도다. 마치 드라이버와 같은 공구 같은 책이다. 그러니 너무 많은 걸 기대하지 말길 바란다.

다만, 맥북을 처음 써보는 사람에겐 이 책이 많이 도움이 될 거라고 생각한다. 윈도우에서 맥북으로 전환할 때 가장 먼저 헷갈리는 게 한/영 전환인데 그것도 그렇고, 기본적인 환경 셋팅을 알려주기 때문이다. 

 

맥북이라고 해서 무조건 어렵진 않다. 다만 낯설 뿐이다. 

이왕이면 업무때문에 어쩔 수 없이 윈도우에서 맥으로 전환해야 하는 경우, 이 책은 더 도움이 될거라고 생각한다. 돈을 받고 일하는 이상 더 효율화를 추구할 수밖에 없고 그렇다면 이 책을 빠르게 보면서 자기에게 적합한 환경셋팅을 금방하고 완독할 수 있을것이기 때문이다. 

 

윈도우를 기반으로 컴퓨터 활동을 해왔고 이 책만 어느정도 훑어본다면 맥을 사용하지 못해서 업무나 자신이 원하는 일을 못하는 건 별로 없을거라고 생각한다. 

 

그러니 책보다도 더 중요한 건 겁내지 말고 새로운 걸 발견하는 즐거움을 느껴보는 것 뿐이다.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
머신러닝 엔지니어링 인 액션 - 머신러닝 엔지니어링 개념부터 프로덕션까지 성공적인 머신러닝 프로젝트 구축하기
벤 윌슨 지음, 김대근.심대열 옮김 / 한빛미디어 / 2023년 12월
평점 :
장바구니담기



한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.


머신러닝 붐이 일었을 때와 달리 점점 더 시간이 가면 갈수록 머신러닝 기법에 대한 강조보다는 어떻게 프로젝트를 구성하는지, 실무에서 어떤 점들을 고려해야 하는지, 재무적인 관점을 어떻게 어필해야 하는지와 같이 조금 더 실무와 가까운 내용의 책들이 나오고 있다. 


이 책도 그런 책 중 하나다. 챕터 4까지 코드 한 줄 안나온다. 

계속해서 문제 정의와 스코프 설정에 대한 내용을 강조한다. 

저자는 처음부터 현자였던 걸까? 


그렇게 포장할 수도 있겠지만, 저자는 포장하지 않고 자신의 아픈 상처를 드러낸다. 


66쪽을 보면 이런 구절이 나온다.

흥미로운 최신 알고리듬을 사용하고 싶은 열정이 프로젝트에서 형편없이 발휘된 사례를 여러 번 목격했습니다. 대표적인 예는 이미지 해상도 업스케일링을 위한 GAN 프로젝트로, 12명의 데이터 과학자로 구성된 팀이 10개월이 걸려서야 프로덕션 준비 및 확장 가능한 상태에 도달할 수 있었습니다. 제가 경영진과 대화할 때는 회사가 이탈 모델, 사기 탐지 모델, 수익 예측 모델을 구축하기 위해 컨설턴트를 고용한 상태였습니다. 경영진은 내부 팀이 R&D 프로젝트를 하느라 너무 바쁘기에 중요한 모델링 작업을 외부 컨설턴트에게 맡겨야 한다고 생각했죠. 결국 이 회사와 일한 지 12주 만에 데이터 과학 팀 전체가 해고되었고 회사는 이미지 프로젝트를 포기했습니다.


경영진과 대화를 한다고 하는 걸 봐서, 저자가 팀 리드였던거라고 추론해본다면 저자는 잘못된 프로젝트 선정과 잘못된 스코프 설정 등으로 인해 3개월만에 팀이 폭파되는 경험을 온전히 감내해야만 했다. 단순히 실무자도 아니고 책임자이니 팀원들의 비난까지 얼마나 받았을지 쉽게 상상해볼 수 있다.


그만큼 머신러닝 프로젝트는 예상외로 쉽지 않다. 아무리 ChatGPT가 나오고 코딩을 배워본 적 없는 초심자라도 크롤링도 하고 모든 걸 다 할 수 있는 세상이라고 하지만, 돈이 왔다갔다 하는 실무 환경에서 성과를 내기 위해선 그 이상의 뭔가가 있어야 하고, 그건 예전부터 강조되어왔던 문제정의와 커뮤니케이션 그리고 이를 뒷받침해 줄 적절한 시스템이다. 


XGBoost를 써서 Accuracy가 98.9%나왔느냐 99%가 나왔느냐는 캐글 컴피티션에서는 중요할지 몰라도, 실무에서는 중요할 수도 있고 중요하지 않을 수도 있다. 아니 오히려 전혀 중요하지 않을 수도 있다. 그렇기에 저자는 계속해서 오컴의 면도날 법칙, 즉 간단하게 문제를 처리할 수 있다면 간단하게 처리하는 게 최선이며, 복잡성은 차근차근 높여갈 것을 조언한다. 어느 정도 기법에 대해서 익히고 실무가 궁금한 사람에게 이 책은 적합할 듯 하다.



밑줄긋기

p.16



p.35

ML 프로젝트가 더욱 복잡해지는 이유는 전통적인 소프트웨어 개발 프로젝트와는 다른 두 가지 중요한 요소 때문입니다.


첫째는 프로젝트의 기대치에 대한 세부 사항이 부족하다는 점과

둘째로 ML을 활용함에 있어서 산업의 성숙도가 상대적으로 떨어진다는 점입니다.


1990년대 초반의 소프트웨어 엔지니어링의 상황을 떠올려 보면 이해하기 쉬울 겁니다. 그 당시 기업들은 소프트웨어 기술을 잘 활용하는 방법을 알지 못했고, 관련 도구 또한 턱없이 부족했습니다. 따라서 많은 프로젝트에서 소프트웨어 엔지니어링 팀이 업무 기대치를 충족시키지 못하는 상황이 발생할 수밖에 없었습니다. 과거를 비춰볼 때 현재 2020년대의 ML 업무는 30년 전 소프트웨어 엔지니어링 위치에 있다고 볼 수 있습니다.


p.37~38

잘못된 문제를 해결하기 위한 ML 솔루션 구축만큼 사기를 저하시키는 일은 없습니다.


프로젝트가 실패하는 다양한 원인 중에서 프로젝트 계획 수립 실패는 프로젝트가 무산되는 가장 큰 이유입니다. 여러분이 새로 입사한 데이터 과학자라고 생각해보세요. 첫째 주에는 마케팅 팀의 임원이 찾아와 심각한 비즈니스 문제를 그들의 용어로 설명합니다. 마케팅 팀에서는 고객과 소통할 수 있는 효율적인 방법을 찾아내 고객이 관심 있어 할 만한 행사를 이메일로 홍보해야 하는 상황입니다. 하지만 경영진은 세부적인 내용을 완전히 무시한 채 "이메일 열람 비율이 올라갔으면 좋곘다"라고만 말합니다.


이 상황에서 마케팅 팀의 팀원들에게 이메일 열람률 상승이라는 최종 목표에만 촛점을 두고 질문한다면 그들은 이를 달성할 무수한 방법을 이야기할 것입니다. 고객에게 맞춤화된 콘텐츠를 추천해주는 이메일을 작성하고 싶은가요? 자연어 처리 기반의 시스템으로 각 고객에게 적합한 제목을 찾고 싶은가요? 아니면 추천 시스템을 구축해 일별 판매 데이터를 기반으로 고객과 연관성이 높은 제품 목록을 예측하려고 하나요?


문제에 대한 가이드가 거의 주어지지 않은 채 선택할 수 있는 옵션이 매우 다양하고, 복잡성 또한 각기 다르기 때문에 경영진의 기대에 부합하는 솔루션을 만들기란 거의 불가능합니다. 하지만 적절한 계획 수립에 대해 논의해본다면 더 디테일한 부분을 파악할 수 있고, 경영진이 기대하는 바를 명확하게 정의할 수 있습니다. 즉, 경영진의 목적은 이메일을 읽을 가능성이 가장 높은 시간을 예측하는 것이었죠. 경영진은 단지 전 세계에 있는 사용자들의 출퇴근 시간과 수면 시간을 파악해 각 사용자의 시간대에 맞춰 읽을 가능성이 높은 고객에게만 이메일을 보내고 싶을 뿐입니다. 하루 종일 효율적으로 이메일을 발송하고 싶은 것이지요.


안타깝게도 대부분의 ML 프로젝트가 이런 식으로 시작되곤 합니다. 프로젝트 시작에 앞서 의사소통이 거의 이루어지지 않는 경우가 많으며, 보통은 데이터 과학 팀이 어떻게든 알아서 해줄 거라 기대하곤 합니다. 하지만 무엇을 구축해야 하는지, 어떤 기능을 해야 하는지, 최종 목표가 어떤 것인지에 대한 적절한 가이드가 없다면 프로젝트가 실패할 확률이 매우 높습니다.


사용자의 IP 주소로 알아낼 수 있는 접속 위치 기반으로 쿼리하고, 사용자의 시차를 간단히 분석만 해도 되는 작업이었는데, 수개월의 개발 시간과 노력을 들여 기능이 다양한 추천 시스템을 구축했다면 어떤 일이 발생했을까요? 프로젝트는 중간에 취소되었을 확률이 가장 높고, 만약 구축을 완료했다 하더라도 이렇게 거대한 시스템을 구축한 이유와 막대한 개발 비용이 어떻게 쓰였는지 추궁하는 역공에 시달렸을 것입니다.


p.39



p.41~42




p.49



p.50

배포 전략 중심으로 프로젝트를 계획하지 않으면 손님이 몇 명이나 올지 모르는 채로 디너파티를 여는 것과 같습니다. 돈을 낭비하거나 경험을 망칠 수도 있죠.


p.51

ML 아키텍처를 구축할 때는 가능한 한 가장 단순하게 설계하기 위해 노력하세요. 프로젝트의 추론 주기가 1주일인 경우 실시간 스트리밍이 아닌 배치 프로세스를 사용하는 것이 좋습니다. 데이터 볼륨이 메가바이트 단위인 경우, 데이터베이스와 간단한 가상 머신(VM)을 사용할 수도 있습니다. 여러 노드가 달린 아파치 스파크 클러스터까지는 필요 없습니다. 훈련 수행 시간이 몇 시간이 아니라 분 단위로 측정되는 경우 GPU가 아닌 CPU만으로도 충분합니다.


복잡한 아키텍처나 플랫폼, 기술을 한번 써보기 위해서 도입하려고 한다면 이미 충분히 복잡한 솔루션에 불필요한 복잡성이 추가될 뿐입니다. 새로운 것이 추가될 때마다 무언가 고장 날 가능성이 높아진다는 것을 잊지 마세요. 그리고 쉽게 해결되지도 않습니다. 솔루션을 안정적으로 일관되게 효과적으로 운영하기 위해서는 기술, 스택 및 아키텍처를 단순하게 유지하는 것이 권장하는 모범 사례입니다. 프로젝트의 시급한 비즈니스 요구 사항을 해결하는 데 딱 필요한 만큼만 있으면 됩니다.


p.55

"지난 분기 예산을 살펴보니 이 ML 프로젝트에 분기당 63,750달러(한화로 약 8천만 원)가 들었습니다. 그럼 이 프로젝트로 도대체 얼마를 벌고 있는 걸까요?"

-> 이 질문은 비용이 어느 정도 발생하는 상황에서 받을 수 있는 질문입니다. 프로젝트 비용이 매우 낮아 회사 예산에서 거의 눈에 띄지 않는 수준이라면 이런 질문을 받을 일이 없겠지만, 비용이 많이 든다면...


수익 기여도라니... 


당황스럽습니다. 

전년 대비 매출을 비교할까요?

손실 지표면 충분한 거 아닌가요?

매출이 늘고 있는데, 그럼 된 거 아닌가요?

프로젝트 계획 단계에서 기여도와 측정 방식에 대해 합의를 도출하지 못하고 모델의 효율성에 대한 철저한 통계 분석이 지속적으로 이뤄지지 않는다면 아무리 훌륭한 솔루션이라도 무용지물이 될 수 있습니다.


p.56

모델의 기여도를 정확하게 측정하는 유일한 방법은 A/B 테스트를 수행하고 적절한 통계 모델을 사용하는 것입니다. 모델에 의한 추가 매출이 얼마나 되는지 보여주는 매출 상승률을 추정 오차를 포함해서 계산하는 것입니다. 하지만 이미 모든 고객에게 솔루션이 배포되었기 때문에 A/B 테스트라는 버스는 이미 떠난 후입니다. 팀은 모델의 지속적인 존재를 정당화할 수 있는 기회를 잃었습니다. 이 프로젝트가 당장 중단되지는 않겠지만, 회사가 예산 지출을 줄여야 한다면 분명히 도마 위에 오를 것입니다.


이런 경우를 대비해 항상 미리 생각하고 계획하는 것이 좋습니다. 


p.65


p.66

최신 기법이 정교하지 않은 이유는 매우 간단합니다. 솔루션을 유지 관리해야 하기 때문이죠. 월별이든 매일이든 실시간이든 솔루션과 코드를 디버깅하고, 개선하고, 불일치 문제를 해결하고, 지속적으로 실행해야 합니다. 주어진 솔루션이 정교할수록 장애를 진단하는 데 시간이 오래 걸리고, 문제를 해결하기가 더 어렵고, 추가 기능을 위해 내부 로직을 변경하는 것이 난해합니다.


단순한 솔루션을 추구하는 방식(즉, 문제를 해결하는 가장 단순한 설계 및 접근 방식)은 이미 해결한 문제의 솔루션을 유지 관리하는 데 필요한 시간을 단축하는 것과 직결됩니다. 그러면 더 많은 문제를 해결하고 회사에 더 많은 가치를 제공하며, 더 많은 문제를 살펴볼 수 있게 됩니다.


흥미로운 최신 알고리듬을 사용하고 싶은 열정이 프로젝트에서 형편없이 발휘된 사례를 여러 번 목격했습니다. 대표적인 예는 이미지 해상도 업스케일링을 위한 GAN 프로젝트로, 12명의 데이터 과학자로 구성된 팀이 10개월이 걸려서야 프로덕션 준비 및 확장 가능한 상태에 도달할 수 있었습니다. 제가 경영진과 대화할 때는 회사가 이탈 모델, 사기 탐지 모델, 수익 예측 모델을 구축하기 위해 컨설턴트를 고용한 상태였습니다. 경영진은 내부 팀이 R&D 프로젝트를 하느라 너무 바쁘기에 중요한 모델링 작업을 외부 컨설턴트에게 맡겨야 한다고 생각했죠. 결국 이 회사와 일한 지 12주 만에 데이터 과학 팀 전체가 해고되었고 회사는 이미지 프로젝트를 포기했습니다.


때로는 회사에 엄청난 가치를 가져다주는 기본적인 업무를 수행하는 것이 일자리를 유지하는 데 도움이 됩니다(그렇다고 예측, 이탈, 사기 탐지 모델링이 특별히 흥미로워 보이지 않더라도 간단하다는 의미는 아닙니다).


p.67




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo