logo
기술 블로그
logo
AKS 상용 서비스 적용기 (2) - Argocd를 활용한 CD 구성
이 번에는 지난 포스트에 이어 AKS(Azure Kubernetes Service) 상용 서비스에 적용한 후기 두 번째 내용으로,ArgoCD를 활용한 CD(Continueous Deployment) 방법에 대해 소개드리려고 합니다.ArgoCD는 이미 너무 유명해서 잘 알고 계실거라고 생각하는데요.구글이나 여러 기술 사이트에 조금만 검색해도 상세한 설명이 쉽게 찾아 볼 수 있어서 따로 설명드리지는 않고 기본 정의만 아래에 추가 하였습니다.ArgoCD는 Kubernetes 환경에서의 애플리케이션 배포와 관리를 지원하는 도구로, GitOps 원칙에 기반하여 설계되었습니다. 기본적으로 Git 저장소에 기록된 애플리케이션의 상태를 Kubernetes 클러스터와 동기화하는 역할을 수행합니다. 이를 통해 배포의 전체 상태와 변화 과정을 Git을 통해 효과적으로 추적하고 관리할 수 있습니다.저는 아래와 같은 전략으로 CD를 구성해보았습니다.• None argoCD를 통해 ACR에 저장되어 있는 어플리케이션 도커이미지를 k8s에 배포• None manifest yaml 파일을 하나의 git repo에서 모두 관리하고 프로젝트는 디렉토리로 구분하여 저장• None ArgoCD 등 k8s 관리에 필요한 것들을 서비스하기 위한 클러스터를 별도로 구성 (mgmt cluster). 단, 개발환경(dev/stg/live) 마다 하나씩 존재어떻게 CD를 구성하였는지 좀 더 자세히 알아보도록 하겠습니다.우선 manifest 파일 저장을 위해 git repository를 하나 생성하였습니다.ArgoCD는 위 용어 정의를 보셨다시피 Git 저장소에 기록된 애플리케이션의 상태를 동기화 하도록 되어 있는데요.따라서 애플리케이션에 대한 상태 정의 파일(manifest)을 저장할 수 있는 repository가 하나 필요합니다.ArgoCD에서 app을 만들 때마다 git project를 만들면 너무 저장소가 많아 지겠죠..?그래서 하나의 git repository에 여러개 애플리케이션의 manifest 파일들을 같이 관리하려고 합니다.이 때 ArgoCD에 app을 정의할 때 이 app이 어떤 애플리케이션인지 또 어떤 환경계(dev/stg/live)인지 알아야 합니다.이를 위해 아래와 같이 으로 네이밍룰을 정해 디렉토리를 생성하였습니다.• None 어떤 app인지 구분하기 위해 root directory 이름을 app명으로 작성• None env(환경계)를 구분하기 위해서 하위 directory 이름을 (dev/stg/live)로 작성 물론 git branch(develop/staging/main)로 구별할 수도 있지만, 다른 환경 파일을 수정할 때마다 브랜치를 스위칭 해주어야 하고 develop, staging, main 브랜치의 파일 내용을 다르게 관리해야 하기 때문에 (merge 하면 안됨) 좋지 않은 방법이라고 생각하여 main 브랜치에 모두 올려놓고 디렉토리 이름(dev/stg/live)으로 구분하도록 하였습니다.3. Deployment 생성 : 애플리케이션의 업데이트와
SK텔레콤
·
오늘
logo
[Pandas] Pandas의 inplace=True동작에 대해서
이번 포스팅에서는 Pandas Object의 inplace=True 동작에 대해서 다룹니다.inplace = True동작이 어떻게 동작하는지, 그리고 왜 사용을 지양하는지에 대해서 알아 볼겁니다.inplace는 Object의 불변성과 관련된 중요한 키워드 입니다.기본적으로 불변성 Data는 Data자신이 바뀌는일 없이Data에 변경이 생길경우 변경이 적용된 새로운 Data를 만들어 줍니다.아래 Series Object를 정렬시켜주는 를 보시겠습니다.위처럼 정렬이된 Series Object를 반환하지만기존 변수에는 정렬되지 않은 Series가 그대로 남아있습니다.하지만 매개번수에서 로 설정할 경우 전혀 다른동작을 보여주게 됩니다.보는것처럼 Object가 가지고있던 Data가 바뀌어 바뀌어 버립니다!실제 Pandas Source Code 내부에서 어떤일이 일어나는지 보시겠습니다.일단 코드로 가 보겠습니다.먼저 inplace일 경우 View상태에서는 실행이 불가능 합니다.때문에 위처럼 Error처리가 되어있는것을 볼 수 있습니다.그리고 sorting을 할 결과에 따라 행동이 나뉘게 되는데sorting을 할 필요가 없는 경우 자신의 복사본을 반환하거나method를 통해서 무언가는 업데이트 시키는것을 볼 수 있습니다.그리고 실제 정렬이 필요한 경우를 보면Series가 가지고있던 value와 index를 가지고오고numpy의 fancy indexing을 활용해서 정렬된 상태의 Array를 만들어 줍니다.그리고 이 데이터 가지고 새로운 Object를 만들어 주는데이때 를 통해서 데이터가 2배가 되는것을 막아주는것을 볼 수 있습니다.이렇게 로 반환된 data를 Pandas에서는 라고 합니다.이런 View는 사용한 원본Data가 바뀔경우 Series의 값 역시 변경됩니다.이제 마지막으로 inplace 여부에따라 분기가 갈립니다.result에 해당하는 Series Object에 Original(기존)의 모든 properties를 전송하는 모습을 볼 수 있습니다.하지만 attrs같은 경우 pandas에서 실험적으로 metadata를 관리하는 방법으로일반적은 Series를 사용할때는 name이외에 다른 metadata는 없습니다.다른 method는 모두 cache와 연관되어있고중요한 부분은 바로 이 부분 입니다.에는 data와 index정보가 담겨있다고 했던거 내용이 기억 나시나요?inplace로 실행할 경우 이처럼 Class의 만 갈아끼어 넣어주는 방식으로 method가 동작합니다.3. 아쉬우니깐 도 살펴보고 가기조건에따라 na가 제거된 새로운 Array를 만들고이 Array를 가지고 inplace 매개변수의 값에 따라서 분기를 나눠 수정하는것을 볼 수가 있습니다.결국 와 를 통해서 본 소스코드를 정리해보면.• None data의 값 기준으로 정렬된 복사본을 만든다.• None 이 복사본을 가지고 copy = False로 새로운 Series Object를 만들어준다.• None 새로운 Object에서 inplace 여부에 따라 -> inplace = Fal
SK텔레콤
·
하루 전
logo
고성능 GPU 클러스터 도입기 #1: 요리하라고 해서 왔는데 프라이팬이 없어요
‘좋은 투자’를 위해서는 무엇이 필요할까요? 많은 것들이 필요하겠지만 그중에서도 주가 변동, 거래량, 경제 지표, 뉴스 기사 등 방대하고 어마어마한 양의 실시간 데이터를 종합하여 분석해서 가치 있는 정보를 추출하는 것이 필수입니다. 보통 ‘애널리스트’가 이런 작업을 하는데요. 애널리스트가 되기 위해선 수년, 수십 년간의 훈련과 경험을 통해 전문성을 쌓아야 합니다.하지만 토스증권은 ‘투자를 위한 분석 작업을 인공지능이 대신해주면 어떨까?’라는 생각을 하게 됩니다. 이 목표를 향해서 대용량 금융 및 증권 데이터를 효과적으로 취합하고 분석하여 사용자에게 가치 있는 정보를 제공하기 위한 연구를 계속해왔는데요. 이러한 작업을 가장 수행할 수 있는 도구로 최근에는 LLM(대형 언어 모델, Large Language Model)이 각광받고 있죠.오늘은 토스증권은 왜 자체 LLM을 개발하기로 결정했는지, 그리고 왜 고성능 자체 GPU 클러스터가 필요했는지 설명드릴게요. 다음 포스트에서는 더 자세한 도입기를 다뤄보겠습니다.토스증권에서 LLM을 필요로 하는 이유LLM은 단순한 텍스트뿐만 아니라 표, 그래프, 그림 등 인간이 인지할 수 있는 다양한 형태의 데이터와 인간도 인지하지 못하는 지표들을 습득하고 판별할 수 있기 때문에 토스증권에서 필요하다고 판단했습니다. 예를 들어, LLM으로 복잡한 금융 보고서를 분석하고, 트렌드를 예측하며, 사용자 맞춤형 투자 조언을 제공할 수 있어요.LLM(대형 언어 모델, Large Language Model)이란, 대규모 텍스트 데이터를 학습하여 인간과 유사한 자연어 이해와 생성 능력을 갖춘 인공지능 모델이에요. 이 모델은 방대한 양의 데이터에서 패턴과 규칙을 학습하여 문맥을 이해하고, 의미 있는 정보를 추출해낼 수 있습니다. LLM은 고도의 비정형적인 데이터를 처리할 수 있으며, 앞서 언급했듯이 단순한 텍스트뿐만 아니라 표, 그래프, 이미지 등 다양한 형태의 데이터를 분석하고 이해하는 능력이 있어요. 또한, LLM은 높은 유연성과 적응력을 가지고 있어, 특정 도메인에 맞춰 세밀하게 조정될 수 있고, 이를 통해 더욱 정교하고 전문적인 정보를 제공할 수 있어요. 이러한 특성 덕분에 LLM은 금융, 의료, 법률 등 여러 분야에서 복잡한 정보 분석과 예측에 혁신적인 도구로 사용되고 있어요. 엄밀히는 LLM과 LMM(Large Multimodal Model) 를 구분하여 사용해야 하지만 여기서는 편의상 모두 LLM으로 통일하여 쓰겠습니다!시중의 LLM으로는 해결할 수 없는 이유시중에 나와 있는 대부분의 LLM(대형 언어 모델)은 주로 언어 이해와 생성에 초점을 맞추고 있고, 일반적인 텍스트 데이터에 대해 학습되었기 때문에 증권 관련 기초 지식은 가지고 있지만 고도화된 분석 능력은 부족해요. 이러한 가장 큰 이유는 증권 관련 데이터는 구축하기가 매우 어렵기 때문입니다. 증권 데이터는 매우 방대하며, 개인정보를 포함하고 있어 수집과 사용이 제한돼요. 또한, 증권 데이터는 다양한 형태로 존재하기 때문에 이를 효과적으로 처리하고 분석하
비바리퍼블리카
·
2일 전
logo
2024 카카오 인턴십 뉴크루들의 기술온보딩 여정
글쓴이 소개sky.j안녕하세요. 카카오 기술기획에서 테크 영입/성장을 담당하고 있는 sky(스카이)입니다. 테크직군 크루들의 기술성장을 위한 다양한 프로그램을 운영합니다. 👏eve.y2k안녕하세요. 카카오 애플리케이션을 모니터링하기 위한 표준 시스템을 개발하는 모니터링기술의 eve(이브)입니다. 다양한 챌린지가 가득한 카카오에서 개발할 수 있게 되어 기쁘게 생각합니다 ☺️helen.one안녕하세요. 카카오 인턴십 과정을 마치고 FE 개발로 합류한 다음채널개발의 helen(헬렌)입니다. 다음채널개발 팀의 팀원으로서 기여할 수 있도록 성장하고 싶습니다 🙌깃헙 링크에서 뉴크루들의 기술 온보딩의 코드를 확인하실 수 있습니다! 👍1. 들어가며안녕하세요. 카카오 기술기획에서 테크직군의 성장을 고민하는 sky입니다.올해 카카오에는 매우 큰 이벤트가 있었습니다. 바로 2024년 카카오 채용 연계형 겨울 인턴십이 진행이 되었다는 것인데요, 약 두 달간 진행된 겨울인턴십을 마친 인턴분들께서 드디어 카카오의 정규 크루로 입사를 하게 된 것입니다. 이렇게 입사한 카카오 뉴크루들을 위해 저희는 크루분들이 각각 현업으로 가기 전 Backend 기술 온보딩을 진행하였습니다. 뉴크루들이 가진 열정에 멋진 체계적인 기술 역량 한 스푼을 더한다면, 이후 현업에 돌아가서도 무서운 속도로 적응과 성장을 할 수 있다고 믿기 때문이죠.뉴크루들은 Backend 온보딩 기간 동안 자바와 스프링을 중심으로 TDD와 객체지향, 그리고 WAS 구현을 통한 프레임워크의 이해 등 다양한 분야의 지식을 배우며 경험 및 성장하게 되는데요, 그럼 지금부터 Backend 온보딩을 매우 우수한 성적으로 마친 eve.y2k와 helen.one의 생생한 경험과 성장 과정을 통해 여러분들과 함께 나누어 보고자 합니다.2. 2024 겨울 인턴십 소개2024 겨울 인턴십은 채용 연계형으로 진행된 프로그램이에요. 약 두 달간의 프로젝트에 참여하여 과제를 수행하고, 나아가 카카오의 문화와 일하는 방식 등을 경험할 수 있습니다. 또한 이 과정에서 나에게 맞는 기술과 직무에 대해 고민을 해 볼 수 있는 소중한 시간이기도 합니다. 프로젝트 및 인턴십을 마치게 되면, 전환 인터뷰를 통해 정규 크루로 입사하게 되는 프로세스로 진행이 됩니다.이번 겨울인턴십에 대해 보다 더 많은 궁금증이 있으시다면 2024 카카오 채용 연계형 겨울 인턴십 Coming soon! 에서 확인 해 주세요!3. 기술 온보딩은 이렇게 진행됐어요🚀 (eve & helen)뉴크루 기술 온보딩은 미션을 받고, 미션의 요구사항을 만족하는 애플리케이션을 개발하는 과정으로 이뤄졌습니다. 교육 과정이 진행되는 4주 동안 총 3개의 미션을 일정한 단계를 반복하며 진행했습니다.그 과정을 간략히 요약하면, 일단 미션의 기능적 요구사항과 기술적 요구사항을 듣고 이를 구현하는데 필요한 개념을 강의를 통해 학습했습니다. 강의는 프로그래밍 이론뿐만 아니라 클린 코드 기반의 자바 프로그래밍에 익숙해질 수 있도록 구성되었습니다. 그 뒤 페어 프로그래밍 및 개별 작업을 통해
카카오
·
2일 전
logo
효율 최강 파인튜닝 솔루션 Unsloth (ft. Continued Pre-Training)
지난 포스팅에서는 코딩 없이 모델을 파인튜닝 할 수 있는 대표적인 No-Code 파인튜닝 툴인 LLaMA-Factory와 Axolotl을 소개해드렸습니다.오늘은 가난한 자의 파인튜닝 솔루션 Unsloth 라는 툴을 소개하려고 합니다.'Unsloth'는 사전적으로 게으르지 않은, 나태하지 않은 이라는 의미를 가지고 있으며, 끊임없이 노력하고 발전하는 사람들을 칭찬하는 의미의 신조어입니다.이름에서 유추할 수 있듯이, Unsloth 개발자들은 파인튜닝의 성능과 효율성을 끌어올리기 위해 부단히 노력하고 있다고 합니다.하지만 재미 있게도, 마스코트는 느림의 대명사 나무늘보를 내세우고 있습니다.제가 '가난한자의 파인튜닝 솔루션'이라고 표현한 이유는, Unsloth가 적은 자원으로도, 심지어 GTX와 같은 소비자용 그래픽 카드에서도 LLM을 파인튜닝할 수 있는 방법을 제공하기 때문입니다.GPU 자원이 적어서, GPU 모델이 낮아서 LLM을 직접 튜닝하지 못했던 여러 사용자들에게 유용한 솔루션이 될 수 있을 것으로 생각 됩니다.더불어 학습 속도를 높여 좀 더 생산적인 파인튜닝을 할 수도 있을 것입니다.이전 포스팅을 통해 툴 자체의 소개뿐만 아니라 데이터 전처리, 프롬프트 템플릿, Instruction tuning, Alignment 기법 등 여러 가지 파인튜닝에 필요한 기법들을 같이 소개해드렸습니다.이번 포스팅에서는 그동안 언급만 하고 실제 구현해보지 못했던 Full 파인튜닝에 대해서도 간단히 다루려고 합니다.이 글에서 다루는 내용은 다음과 같습니다.• None Unsloth은 파인튜닝을 어떻게 효율화 했을까?• None Continued pre-training이 필요한 이유와 Unsloth을 통한 학습 방법Unsloth는 Daniel과 Micheal Han 형제가 파인튜닝 효율화를 위해 시작한 프로젝트입니다.시작한 지 얼마되지 않은 신생 프로젝트임에도 불구하고, 최근 파인튜닝 분야에서 많은 사용자들의 지지를 받고 있는 솔루션입니다.트랜디한 최신 기술을 비교적 빠르게 적용하고 있고, 두 형제를 주축으로 커뮤니티 활성화도 잘 되어 있는 편입니다.솔루션은 기본적으로 무료 버전으로 제공되지만, 2개 이상의 GPU를 사용하는 멀티 GPU 학습의 경우 유료 서비스가 필요합니다.이로 인해 솔루션의 한계가 명확하며, 오픈소스와 유료 서비스 간의 간극을 어떻게 해결할지가 향후 솔루션의 대중화에 영향을 미칠 것으로 보입니다.자세한 내용은 아래 링크를 참조하세요Unsloth는 LLM의 파인튜닝을 최적화하기 위한 툴입니다. 여기서 '최적화'란 파인튜닝 시 필요한 메모리 사용을 줄이고 학습 속도를 높이는 것을 의미합니다.다음과 같은 특징들로 사용자로 부터 좋은 피드백을 받고 있습니다.• None• None Unsloth는 전통적인 학습 기법에 비해 현저한 학습 속도 향상을 제공합니다.• None 사용하는 LLM 모델과 GPU 종류에 따라 성능 차이가 있을 수 있지만, 대부분의 조합에서 기존 학습 기법을 능가하는 성능을 발휘합니다.• None• None Unsloth는 메모
SK텔레콤
·
2일 전
logo
[Swift] 한글 검색 라이브러리 만들어보기
그동안 다양한 오픈소스 라이브러리를 사용해 오면서 그동안 직접 라이브러리를 만들어보고 싶다는 생각을 하고 있었는데,이번 토스에서 만든 es-hangul(https://github.com/toss/es-hangul) 을 보고 여러 한글 관련 프로젝트를 진행해왔던 경험을 살려Swift를 활용한 한글 검색 라이브러리를 만들게 되었습니다.• None 초성 검색: 사용자가 입력한 초성에 맞는 데이터를 검색합니다.• None 자동 완성: 사용자의 입력에 기반한 자동 완성 결과를 제공합니다.• None 전체 문자열 검색: 입력된 전체 문자열을 포함하는 데이터를 검색합니다.• None 종합 검색 모드: 초성 검색과 자동 완성을 결합하여 더 넓은 범위의 검색을 지원합니다.• None 기본: 정렬을 수행하지 않음. 데이터 순서대로 반환• None 자모 순서: 항목들을 한글 자모 순서대로 정렬• None 자모 역순: 항목들을 한글 자모 역순으로 정렬• None 편집 거리: Levenshtein (편집) distance 기준으로 가장 유사한 순서대로 정렬한글의 초성 검색은 한글 음절을 초성, 중성, 종성으로 분리하여 초성만을 추출하고 이를 이용해 검색하는 방식입니다. 한글 음절은 유니코드 표준을 활용하여 분리됩니다. 초성 검색의 기본 원리는 다음과 같습니다:• None 한글 음절은 유니코드 범위 0xAC00에서 0xD7A3까지의 값을 가집니다. 이 범위 내에서 각 음절의 유니코드 값을 이용하여 초성, 중성, 종성을 분리할 수 있습니다.• None 한글 음절의 유니코드 값에서 '가'의 유니코드 값을 뺀 후 초성, 중성, 종성의 인덱스를 계산합니다.• None 한글 문자열의 경우, 입력된 문자열을 분해하여 접두사 비교를 보다 정확하게 수행할 수 있습니다. 이를 위해 한글 음절을 초성, 중성, 종성으로 분해합니다.• None 입력된 문자열을 분해하여 접두사 비교를 수행합니다.iOS에서 초성 검색의 필요성iOS의 기본 문자열 검색 기능은 한글의 초성을 인식하지 못하는 경우가 많아, 로컬에서 검색을 수행하는 앱들의 경우 초성 검색 및 자동 완성 검색을 지원하지 못하는 경우가 많았습니다.이를 통해 사용자들이 iOS 환경에서 쾌적한 한글 검색 경험을 할 수 있으면 좋겠습니다.
SK텔레콤
·
2일 전
기술 블로그 더 보기
Copyright © 2024. Codenary All Rights Reserved.