뒤로가기back

으라차차! 막내 개발자 Asher의 AI Layer 최적화 구현기

2023.05.10 by Asher Kim

으라차차! 막내 개발자 Asher의 AI Layer 최적화 구현기

(Writer: Asher Kim)

 

 

AI가 이렇게나 가까이 우리들의 피부에 닿아있던 적이 있었을까 싶을 정도로 최근 AI의 사용이 점점 더 대중화되고 있습니다. 매일 쏟아져 나오는 뉴스만 봐도 알 수 있죠. 지난 포스팅(소리 만들어주는 AI는 없나요? : 사운드와 생성 AI)을 통해 소개해드렸듯, 가우디오랩에서도 여러 AI 제품들을 준비하고 있는데요! 저는 이번 글을 통해 가우디오랩이 AI 오디오 제품을 연산 측면에서 어떻게 최적화해나갔는지, 그 좌충우돌 과정을 간단히 소개해드리려고 합니다.

 

오디오에 AI 적용하기

 

AI는 사람이 직접 알고리즘을 작성하기 어려운 문제를 쉽게 해결해 줍니다. 소리를 듣고 악기 별로 음원을 분리하거나, 주어진 키워드에 맞는 소리를 생성하는 건, 아무래도 그 과정을 표현하기 쉽지 않아보이는데요. 가우디오랩의 AI 제품들은 이러한 어려운 문제들을 데이터에 기반해 자동으로 학습하고 패턴을 파악하여 해결합니다. 그럼 본격적인 내용에 들어가기에 앞서서, 가우디오랩의 AI가 얼마나 잘 문제들을 해결했는지, 한 번 확인해 볼까요? ▶︎▶︎▶︎ [데모 먼저 확인하고 오기]

 

성능은 중요합니다

 

가우디오랩의 오디오 제품은 크게 온라인 방식과 오프라인 방식으로 나눌 수 있습니다. 온라인은 서버에서 연산해서 사용자에게 보내는 방식이고, 오프라인은 사용자의 컴퓨터나 핸드폰, 이어폰 등에서 연산하는 방식입니다. 후자는 엣지 컴퓨팅이라고도 합니다.

 

온라인 방식은 주로 큰 모델을 제품화할 때 사용됩니다. 그렇기 때문에 더 저렴하면서도 안정적인 서비스를 제공하기 위해서는 최적화를 통해 서버 비용을 낮추고 수행 시간을 줄이는 것이 중요합니다. 한편, 오프라인 방식은 주로 작은 모델을 제품화할 때 사용되는데, 특히 실시간 처리가 요구되는 경우가 많습니다. 디바이스에서 수행중인 다른 작업들을 최대한 방해하지 않으면서 실시간 처리가 가능하게 하기 위해서는, 역시나 최적화를 통해 연산량 및 수행 시간을 줄여야 합니다.

 

결론적으로, 최적화 과정은 오디오 제품을 만들 때, 특히 AI를 사용하는 데 있어 필수적인 부분입니다. 아래에서는 가우디오랩이 세계 최고 수준의 성능을 자랑하는 AI 오디오 제품을 개발한 과정을 소개합니다.

 

 

세계 최고 성능을 자랑하는 가우디오랩의 AI 음원분리 기술!

 

 

항상 최적화가 필요한 것은 아닙니다

 

그러나 모든 단계에서 최적화가 중요한 것은 아닙니다. 최적화를 마쳤는데 모델이 수정될 수도 있고, 들인 시간에 비해 이득이 별로 없을 수도 있습니다. 그리고 이른 단계에서부터 최적화를 생각하다가는, 자칫 중요한 로직에 집중하지 못하게 될 수도 있죠. 그러므로 팀 (또는 회사) 내에서 최적화에 대한 합의가 이루어지는 것이 중요합니다. 언제, 얼마나 시간을 쓸지, 어떤 최적화를 수행할지 등에 대해서요.

 

가우디오랩은 비전에 대한 동기화만 이루어져 있다면 누구나 주도적으로 업무를 만들어서 수행할 수 있는 회사이기 때문에, 저는 최고의 제품을 만들기 위해서는 최적화가 필수적임을 팀 내에 설득했고, 모델 개발이 완료될때 쯤부터 연산 최적화 업무를 시작할 수 있게 되었습니다. 최고의 효율을 내기 위해 생각과 일정을 공유하고 협의하며 결정된 순간이었죠.

 

최적화를 해봅시다

 

AI 제품의 최적화는 크게 모델 경량화와 연산 최적화로 나눌 수 있습니다. 모델 경량화는 원본과 의미는 비슷하지만 연산의 수는 적은 모델로 갈음하는 것이고, 연산 최적화는 동일한 연산을 더 빠르게 수행하는 것입니다. 이 글에서는 GSEP-LD의 연산 최적화를 위해 저와 저희 팀이 한 삽질노력들을 설명해 보겠습니다.

 

측정하세요!

 

본격적으로 최적화를 논하기 전에, 측정의 중요성은 아무리 강조해도 모자라지 않습니다. 암달의 법칙에 따라 우리는 가장 많은 시간 비중을 차지하는 코드부터 최적화해야 합니다. 그런데 성능에는 아주 다양한 요소가 영향을 주기 때문에, 성능을 예측하는 것은 커녕, 올바르게 성능을 측정하는 것조차 무척 어렵습니다. 이에 대해서는 아래의 두 영상에 잘 설명되어 있습니다.

 

·       CppCon 2015: Chandler Carruth "Tuning C++: Benchmarks, and CPUs, and Compilers! Oh My!"

·       CppCon 2015: Bryce Adelstein-Lelbach "Benchmarking C++ Code"

 

나아가 측정 결과를 잘 해석하는 것도 중요합니다. 평균과 중앙값을 통해 전체적인 추이를 알 수 있고, 다른 코드와 비교할 때는 Student's t-test 등의 방법을 사용해 유의미한 차이가 나고 있는지 검증할 수 있습니다. 또한 실시간 오디오 처리라면 하위 1%의 성능도 중요하게 봐야 합니다. 잠깐이라도 실시간을 맞추지 못한다면 바로 소리가 끊기기 때문입니다.

 

다른 프레임워크 사용하기

 

PyTorch는 머신러닝 모델의 연구 과정에서 주로 사용하는 프레임워크입니다. 사용이 편리하다는 장점이 있지만, 경우에 따라 Inference 성능이 다른 프레임워크에 비해 부족할 수 있습니다. GSEP-LD PyTorch 버전은 RTF 0.65 수준이었는데, 이 정도면 다른 프로그램이 동시에 실행중이거나 성능이 좋지 않은 프로세서를 사용하는 경우엔 실시간을 맞추기 어려우므로, 저희는 다른 프레임워크들을 검토했습니다.

 

CoreMLApple 기기에 머신러닝 모델을 서빙하기 위한 프레임워크입니다. Apple 기기의 하드웨어 자원을 적극적으로 활용할 수 있고, 쉽게 프로파일링할 수 있다는 장점이 있습니다. 기본적으로는 coremltools를 사용해 PyTorch 모델을 CoreML 모델로 변환하고, CoreML에서 기본적으로 지원하지 않는 레이어는 MLCustomLayer를 통해 수동으로 작성할 수 있습니다.

 

TFLite (TensorFlow Lite) 는 모바일 기기 등에 머신러닝 모델을 서빙하기 위한 프레임워크입니다. PyTorch 모델을 TFLite 모델로 바꾸는 데는 다음의 두 방법이 있습니다.

·       TensorFlow 2.0 부터는 PyTorch와 거의 비슷한 코드로 모델을 만들 수 있으므로 직접 재작성

·       Torch 모델 → ONNX 모델, ONNX 모델 간소화, ONNX 모델 → OpenVINO 모델, OpenVINO 모델 → TFLite 모델의 과정을 거쳐 자동으로 변환

 

첫 번째 방법의 경우 많은 작업이 필요하지만 가장 확실하게 모델을 포팅할 수 있다는 강점이 있습니다. 두 번째 방법의 경우 시간은 적게 걸리지만 각각의 변환 방법들이 모든 레이어를 지원하는 것은 아니기 때문에, 몇몇 레이어는 수동으로 구현해줘야 합니다. 그 중 저는 두 번째 방법을 통해 원본 PyTorch 모델을 TFLite 모델로 변환했고, GRU 레이어를 수동으로 구현하는 어려움이 있었지만, Apple M1 및 2스레드에서 RTF 0.06 수준을 달성했습니다.

 

안된다면? 직접 프레임워크 구현하기!

 

하지만 가우디오랩에서는 이 프레임워크들을 사용할 수 없었습니다. 더 높은 성능이 필요했고, SDK 제품 측면에서는 타 라이브러리에 디펜던시가 없는 것이 유리했기 때문입니다. 그래서 저희는 직접 머신러닝 프레임워크를 개발하기로 했습니다. 이 글에서는 머신러닝 프레임워크를 구현하며 각 레이어를 최적화하기 위해 사용한 기법들 중 몇 가지를 소개하려고 합니다.

 

메모리에 순차적으로 접근하기

 

Inference Engine에서 가장 중요한 부분 중 하나는 각 레이어의 성능을 높이는 것입니다. 제가 받은 모델은 이미 상당히 경량화되어 있어서, 캐시를 적극적으로 활용할 수 있도록 하는 것이 가장 중요했습니다.

 

우선 메모리에 순차적으로 접근하도록 하는 것부터 시작해 봅시다. 예를 들어 메모리에 3 x 3 텐서의 각 원소는 다음과 같은 형태로 저장되어 있을 것입니다.

 

 

그리고 이 원소들의 합을 구하는 코드는 다음과 같이 작성할 수 있습니다.

 

 

이 코드가 메모리에 접근하는 순서는 다음과 같을 것입니다.

 

 

같은 기능을 하는 코드를 이렇게도 작성할 수 있습니다.

 

 

 그리고 이 코드가 메모리에 접근하는 순서는 다음과 같을 것입니다.

 

 

첫 번째 코드는 메모리에 순차적으로 접근합니다. 캐시는 인접한 메모리를 한 번에 읽어오므로, 첫 번째 코드는 캐시 적중률이 높을 것입니다. 반면 두 번째 코드는 메모리에 띄엄띄엄 접근합니다. 텐서의 크기가 작을 때는 별로 차이가 나지 않을지 몰라도, 텐서의 크기가 커지게 되면 메모리에 접근할 때마다 캐시에 다시 적재해야 하므로 성능이 하락합니다. 추가로, 메모리에 순차적으로 접근하는 코드는 컴파일러가 자동 벡터화를 수행해줄 확률이 높습니다. 따라서 두 번째 코드처럼 메모리에 순차적으로 접근하지 않는 코드는 최소화하는 것이 좋습니다.

 

메모리 쪼개기

 

하지만 메모리에 순차적으로 접근한다고 해도, 이것이 반복되면 매번 캐시에 새로 적재해야 합니다.

 

 

t2는 j와 k를 통해 메모리에 순차적으로 접근하지만, 가장 바깥의 i 때문에 캐시 활용성은 좋지 않아 보입니다. 이를 해결하기 위해서는, t2를 줄대로 쪼개서 for문 순서를 바꾸는 것이 좋아보이네요.

 

 

위의 두 기법은 머신러닝에서 가장 많이 사용되는 레이어인 Conv2DLinear 등에도 적용할 수 있습니다.

 

데이터 병렬

 

의존성이 없는 작업이라면 데이터 병렬을 도입하는 것도 좋습니다. OpenMP를 사용하면 데이터 병렬을 손쉽게 적용할 수 있습니다.

 

 

다만, 성능이 병렬화에 크게 의존하면 같이 실행되고 있는 프로그램이나 하드웨어 등 주변 상황에 영향을 많이 받게 되므로, 병렬화는 최대 성능을 높이는 데에 의의를 두는 것이 좋겠습니다. 또한, False Sharing 등의 문제가 발생할 수 있어 메모리 측면에서의 최적화가 까다로워지니, 벤치마킹을 통해 적용 여부를 결정하는 것이 좋습니다.

 

루프 언롤링

 

루프를 사용하게 되면 중단 조건에 대한 오버헤드가 발생합니다. 이는 아무리 분기 예측과 파이프라이닝이 발전해도 어쩔수 없죠. 하지만 여러 번의 번의 루프를 한 묶음으로 처리해서 뜨문뜨문 중단 조건을 검사한다면, 이러한 비용을 아낄 수 있을 것입니다. 상황에 따라 다르지만, 경험상 4번의 루프를 한 묶음으로 처리할 때가 가장 성능 향상 폭이 큰 것 같습니다. 다만 요즘은 컴파일러가 자동으로 언롤링을 수행하는 경우도 있으니, 꼭 컴파일된 결과물을 확인해 보고 사용하세요. 

 

 

SIMD

일반적으로 CPU 명령어 하나는 데이터 한 개를 처리합니다. SIMD는 명령어 하나로 데이터 여러 개를 처리해, 성능을 향상시키는 기법입니다. C++에서 SIMD를 사용하기 위해서는 인트린직 함수 또는 이를 잘 래핑한 라이브러리를 사용하게 되는데요, 여기서는 xsimd 라이브러리를 사용한 예시를 보여드리겠습니다.

 

 

이 코드에 xsimd 라이브러리를 적용하면,

 

 

물론 요즘 컴파일러는 똑똑하기 때문에, 많은 케이스에 자동으로 SIMD 명령어를 적용해 줍니다. 그러나 사람만큼 잘 적용하지는 못하기 때문에, 일단 컴파일러가 잘 auto-vectorize할 수 있도록 코드를 작성하고, 컴파일러가 vectorize하지 못하는 부분만 인트린직 함수나 라이브러리를 사용하면 좋습니다. clang의 경우, -Rpass, -Rpass-missed, -Rpass-analysis 등의 옵션을 통해 컴파일러가 적용한 최적화에 대한 레포트를 만들 수 있습니다.

 

마치며

 

좋은 제품이라면, 수행 결과뿐만 아니라 수행 성능도 좋아야 합니다. 이번 글에서는 왜 최적화가 필요한지, 가우디오랩에서는 어떠한 과정을 거쳐서 최적화가 이루어지고 있는지를 간단히 설명해드려보았습니다. 앞으로도 저는 세상의 모든 소리를 담은 제품을 만들 수 있도록 더욱 열심히 노력하려고요! 읽어주셔서 감사합니다! 😘

 

 

pre-image
소리 만들어주는 AI는 없나요? : 사운드와 생성 AI

ChatGPT가 불러온 생성 AI 돌풍 (Writer: Keunwoo Choi) ChatGPT 만큼 사람들의 삶에 빠르게 스며든 기술이 또 있었을까 싶을 정도로 생성 AI에 대한 관심이 뜨겁습니다. 마치 스마트폰의 초창기를 보는 듯, 새로운 패러다임이 찾아오는 것이 아닐까 하는 기대까지 하게 됩니다. 이처럼 ChatGPT에서 시작된 생성 AI 열풍이 글쓰기가 아닌 미술, 음악과 같은 다른 콘텐츠 영역까지 그 영향력을 확장하고 있음을 실감합니다.   사운드 분야의 생성 AI   사운드 분야도 예외는 아닌데요, 목소리를 AI로 합성하거나 음악을 작곡하는 등의 기술은 이미 많은 관심을 받아왔습니다. 하지만, 우리 주변에서 들려오는 소리를 생각해보면 음성이나 음악의 비중은 사실 크지 않습니다. 오히려 키보드 치는 소리, 옆 사람의 숨소리, 냉장고 소음과 같이 작은 소리가 모여 우리를 둘러싼 소리 환경을 만들고 있습니다. 결국 이러한 소리들이 없으면 아무리 잘 생성된 음성과 음악이라도 충분히 그 빛을 발할 수 없다는 것이기도 합니다.     이렇게 중요하다면, 그동안 우리 주변의 소리(원활한 표현을 위해 ‘효과음(Foley Sound)’이라고 칭하겠습니다)를 만드는 AI가 없었던 이유는 무엇일까요? 답은 간단합니다. 이것이 가장 난이도 높은 일이기 때문입니다. 세상의 모든 소리를 만들기 위해서는 세상의 모든 소리에 대응하는 소리의 데이터를 갖추고 있어야 합니다. 그만큼 고려해야하는 변수도 많을 수 밖에 없습니다.    하지만 이런 어려움에 굴복할 가우디오랩이 아닙니다.  세상의 모든 소리를 만들기 위해서는 세상의 모든 소리에 대응하는 소리의 데이터를 갖추고 있어야 합니다. 그만큼 고려해야하는 변수도 많을 수 밖에 없습니다.    긴 말 할 것 없이 데모부터 들어보시죠.   AI가 만든 소리 VS 실제 소리     여러분은 몇 개의 정답을 맞추셨나요?들으신 것 처럼 AI가 생성한 사운드의 수준은 실제 녹음된 사운드에 버금갈 정도로 많은 발전을 이루었습니다. 이젠 본격적으로 이렇게 놀랄 정도로 사실적인 사운드를 만들기 위한 AI 기술의 원리를 더 자세히 들여다 보겠습니다.   소리를 AI로 만듭니다.   소리를 표현하는 방식: 파형 그래프   뜬금없어 보이지만 AI로 소리를 만들어내는 과정을 설명하기 위해서는 소리를 표현하는 방식부터 짚고 넘어가야 합니다. 이런 이미지는 아마 많이 보셨을 것 같습니다.     소리의 파형을 시간대별로 나타낸 그래프로, 언제 어느 정도 크기의 소리가 나는지는 짐작할 수 있지만 이 소리가 어떤 특성을 가졌는지까지 파악할 수는 없습니다.   소리를 표현하는 방식: 스펙트로그램 (Spectrogram)   이러한 한계를 극복하고자 만들어진 것이 스펙트로그램입니다.     한눈에 봐도 앞선 그래프보다 많은 정보를 담고 있는 것처럼 보입니다.   자세히 살펴보면, x축은 시간, y축은 주파수, 그리고 각 픽셀의 색깔은 소리의 크기를 나타냅니다. 즉, 스펙트로그램은 어떤 소리에 대한 모든 정보를 담고 있는, 마치 소리의 DNA와 같은 존재라고 할 수 있습니다. 그렇기에 스펙트로그램을 오디오 신호로 변환할 수 있는 도구만 있다면, 소리를 만드는 것은 곧 이미지를 만드는 작업과 동일하다고 볼 수 있는것이죠. 이렇게 되면 많은 일이 간단해집니다. Open AI의 DALL-E 2 에서 사용된 것과 같은 디퓨전 기반 이미지 생성 알고리즘을 그대로 사용할 수 있기 때문입니다.   자, 이제 스펙트로그램을 설명한 이유를 아시겠나요? 이젠 정말로 소리를 만드는 과정을 자세히 살펴보겠습니다.   AI로 소리 만들기, 이렇게 합니다.     1단계: 텍스트 입력에서 작은 스펙트로그램 생성하기   첫 단계에서는 만들고 싶은 소리에 대한 입력을 처리합니다. ‘우렁찬 호랑이의 포효’라는 텍스트를 입력으로 받으면, 디퓨전 모델이 랜덤한 노이즈에서 작은 사이즈의 스펙트로그램을 만들어냅니다. 이 때 만들어진 스펙트로그램은 16x64 픽셀로 이루어진 작은 이미지인데요, 각 숫자는 16개의 주파수 밴드와 64개의 프레임을 나타냅니다. 얼핏 보면 이걸로 뭘 할 수 있겠냐는 의문이 드시겠지만 작은 스펙트로그램도 소리에 대한 상당한 정보를 담고 있습니다. 2단계: 슈퍼 레졸루션(Super Resolution)   그 이후에는 이런 작은 이미지를 점차 개선해 나가는 ‘슈퍼 레졸루션’ 단계를 거칩니다. 디퓨전 모델이 여러 단계를 거쳐 해상도를 개선하면 위에서 본 것과 같은 명료한 형태의 스펙트로그램이 완성됩니다. 3단계: 보코더 (Vocoder)   이제 마지막 단계로 스펙트로그램을 오디오 신호로 변환해주기만 하면 됩니다. 이 때 사용되는 것이 보코더 입니다. 하지만 시중에 오픈소스로 공개되어있는 대부분의 보코더는 음성 신호를 학습하여 제작되었기 때문에 다양한 소리에 대응해야 하는 지금과 같은 시나리오에 적합하지 않다는 점이 문제였습니다. 이에 가우디오랩은 내부 데이터로 학습시킨 세계 최고 수준의 보코더를 개발했습니다. 2023년 상반기 중에는 이러한 보코더를 오픈 소스로 공개할 계획도 가지고 있습니다.   사운드 생성 AI, 가우디오랩이 잘 만들 수 밖에 없는 이유   사운드 생성 AI 개발, 왜 어려울까요?   얼핏 보면 쉬워보이는 과정이지만, 마침내 그럴듯한 소리가 나오기까지 정말 많은 장애물을 거쳐야 했습니다. AI는 도구일 뿐, 실제로는 ‘오디오를 잘 해야만’ 풀 수 있는 문제이기 때문입니다.   일단 오디오 데이터는 그 크기가 남다릅니다. ChatGPT가 학습한 데이터는 약 570GB, 지난 10년간 딥러닝 발전을 이끌어온 이미지넷이 다루는 데이터는 약 1,000개의 카테고리에서 150GB 정도입니다. 하지만, 가우디오랩이 다뤄야 했던 데이터는 약 10TB에 달합니다. 이를 시간으로 바꿔보면 약 1만 시간 분량의 데이터입니다. 이것들을 수집하고 관리하는 데만 해도 상당한 노하우가 필요했을 뿐만 아니라, 학습을 위해 오디오 데이터를 불러오는 시간(i/o 오버헤드)를 줄이는 것도 큰 과제였습니다.   어렵게 학습을 시키더라도 오디오의 경우 AI 모델을 평가하는 것 자체가 어렵습니다. 생성된 시간만큼 들어봐야 하기 때문에 평가에 필요한 시간이 클 뿐더러, 청취 환경에도 큰 영향을 받기 때문입니다.    사운드 생성 AI도 전문가가 만들면 다릅니다.   다행히 가우디오랩에는 프라운호퍼, 삼성전자, 스포티파이 등 글로벌 레벨의 기업에서 풍부한 오디오 연구 경험을 쌓은 음향공학 분야의 석박사급 전문가들이 존재하고, 그들이 직접 청취 평가에 참여하고 있습니다. 그렇기 때문에 그들의 소위 ‘골든 이어’ 로서의 예민함, 좋은 소리에 대한 집착, 그리고 뛰어난 전문성이 그대로 AI 성능에도 반영되고, 이것이 세계 최고 수준의 생성 AI를 만들 수 있는 가우디오랩만의 따라올 수 없는 강점이 되고 있습니다.   사운드 생성 AI, 이렇게 발전합니다   가우디오랩이 그리는 미래는 메타버스에 있습니다. 사운드 생성 AI를 만들게 된 것도 소리 없는 메타버스에 소리를 채우기 위함이었습니다. 물론 지금까지 만들어진 모델의 성능이 뛰어나지만, 세상의 모든 소리를 담으려면 가야할 길이 꽤 많이 남았습니다.     DCASE 2023 이벤트 참여 소식    그래서 가우디오랩은 이렇게 어려운 문제를 해결하기 위해 DCASE 라는 이벤트에 Lead Organizer로 참여합니다! 세계 곳곳에서 모인 최고 수준의 오디오 연구자들과 함께 더 좋은 소리를 만드는 여정을 응원하고, 또 가우디오랩이 만들어낸 사운드가 얼마나 좋은지를 널리 알리기 위한 목적입니다.    DCASE의 결과는 5월에 발표됩니다. 과연 이렇게나 뛰어난 가우디오랩의 사운드 생성 AI가 세계에서는 어떤 평가를 받게 될까요? 좋은 소식으로 여러분을 찾아뵐 수 있도록 많은 응원 부탁드립니다!    곧 AI로 만든 소리도 함께 공개할 예정이니 많은 관심 부탁드려요!   

2023.04.18
after-image
가우디오랩의 여덟 번째 생일을 축하해주세요!

가우디오랩의 여덟 번째 생일을 축하해주세요!     가우디오랩이 창립 8주년을 맞이했습니다!   여덟 번째 생일을 축하하고 8년 동안 헌신과 사랑으로 가우디오랩을 키워준 가우딘들의 노고에 보답하고자 HR팀과 OPS팀이 힘을 모아 소소한 기념행사를 준비해보았는데요. 오늘은 그 현장을 소개해드리려고 해요.   이벤트 준비 중인 Carol과 Heidi     내가 만든 쿠키 🎵 파티에 맛있는 음식이 빠질 순 없겠죠? (찡긋) 버터향이 솔솔 나는 쿠키를 준비해 보았습니다.      각 쿠키 상자에는 가우딘 한 명 한 명을 위한 “스페셜 가우딘 카드”를 제작해 하나씩 꽂아 드렸는데요. 앞면에는 가우딘의 얼굴과 자기소개 한 마디!, 뒷면에는 2023년 새해다짐이 적혀있어요. 잊고 있었던 각자의 올해 목표를 함께 다시금 상기하고, 응원해드릴 수 있었죠!   2023년도 벌써 5개월이 지나갔는데, 여러분들은 연초에 세웠던 목표에 잘 도달하고 계신가요? (저는 아직 가야 할 길이 멀었더라구요🤦🏼‍♀️)      쿠키 상자 속 “8”을 찾아보아요! ⚠️ 유사품에 주의하세요! (ex. 88, 8audio ...등)   재미를 위해 깜짝 럭키박스 이벤트도 진행되었답니다~ 숫자 “8” 스티커가 붙여있는 쿠키상자를 뽑은 가우딘에게는 선물이 기다리고 있었다지요! 거의 모든 상자가 열릴 때까지도 당첨자가 나오지 않아, 많은 분들이 스티커를 어디에 숨겨놨냐며 의문을 제기하셨죠 ㅎㅎ 유사품에 당첨되어 잠깐이나마 기대했다가 실망하는 ‘웃픈’ 모습도 보였어요.       한참이 지난 후, 그 행운의 주인공이 나타났는데요! 바로바로...! 우리의 인턴 가우딘 Eddie입니다! 깜짝 선물은 무려 최신 무선 이어폰! 선물은 모두의 부러움 속에서 Eddie에게 전달되었답니다~ 당첨 축하해요! 🎉       넘치는 기쁨에 입틀막 해버린 Edddie 👍🏻     올해 집중하고 싶은 가우디다움 중 하나는?   또 하나의 이벤트로, 올해 집중하여 실천하고 싶은 PIETICC 중 하나를 선택하는 시간을 가졌어요. PIETICC은 가우디오랩의 일하는 방식이자 ‘가우디다움’이라 규정된 지향점이에요. (PIETICC이 궁금하다면?) 각자가 선택한 PIETICC 항목 스티커를 가우딘 카드에 붙여 올레길에 쪼르륵 걸어두었지요. 연말 이벤트 때 다시 카드를 돌려드릴 예정인데요, 과연 다들 얼마나 더 성장해 있을지 기대가 됩니다!   올레길에 걸린 PIETICC 포스터와 가우딘 카드   소소하게 시간을 내어 준비해 본 이벤트였는데요, 모든 구성원들이 모여 동료들에게 고마움을 전하는 소중한 시간이 되었습니다. 그 현장 모습을 조금 더 공개합니다!!   어때요? 저랑 좀 닮았나요? ^.^     숫자 ‘8’을 눕히면 무한대를 뜻하는 인피니티 ∞ 모양이 되는데요, 마침 2023 가우디오랩의 OKR이 ‘무한활주로’였다죠? 비행기가 이착륙하기 위해서는 활주로가 꼭 필요한것처럼, 가우디오랩도 더 큰 목표를 향해 날아갈 수 있는 무한한 추진력을 만들어보자는 의미랍니다.   훌륭한 소리 경험이 모두에게 전달되는 그날을 기대하며, 가우디오랩의 앞날을 응원해주세요!    

2023.05.17