본문 바로가기
IT최신 트랜드

github

by 스마트업 2022. 4. 29.
반응형

https://github.com/

 

GitHub: Where the world builds software

GitHub is where over 73 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...

github.com

 

알파고로 유명한 구글의 자회사 딥마인드가 또다시 새로운 모델을 내놓았다. 알파고, 알파 제로, 알파폴드에 이은 새로운 알파 시리즈인데, 이번의 모델은 ‘알파 코드(AlphaCode)’라는 이름으로 깃허브(github)의 수많은 소스를 학습하여 실제 코딩 문제를 해결할 수 있는 수준이라고 한다. 이미 딥마인드의 블로그에 간단한 소개와 paper, 그리고 테스트 결과를 공개하고 있다. 딥마인드에 의하면 여러 온라인 개발 대회에서 개발자 상위 54.3% 즉 중간 수준의 개발력을 보여주었다고 한다.

최근 깃허브의 코 파일럿 코 파일럿 등 개발의 일부 작업을 대체해 주는 AI에 대해 관심이 높아진 가운데 실제 코딩할 수 있는 AI가 가능하다면 여러 분야에서 효율성을 높일 수 있는 부분이 생길 것이라는 예측이 있다. 반면 대표적인 고부가가치 산업이며 고도의 정신노동을 요하는 개발 업무까지 AI가 대신할 수 있다면 이는 인간이 할 수 있는 일은 모두 AI가 할 수 있다는 뜻이므로, 말 그대로 진정한 의미에서 직업의 종말을 의미할 것이라는 의견도 있다. 코 파일럿(copilot) 코 파일럿은 MS가 인수한 깃허브에서 제공하는 서비스로, 사용하려면 깃허브 계정이 필요하다. 현재는 tech preview 상태라서 beta wishlist에 이름을 올려놓고 대기해야 하며, 승인을 받은 후에야 사용할 수 있다. 코 파일럿에서 사용하는 것은 OpenAI의 Codex Model인데 이런 초대형 NLP 모델은 상당한 컴퓨팅 파워를 소모하므로 공개적인 베타 서비스하기는 어려워서 제한된 규모의 그룹에게만 서비스하는 것으로 추정된다. 웹상에서 사용할 수 있는 것은 아니고, Visual Studio Code에서 깃허브에 로그인한 후 코드를 입력하거나 주석을 달 때마다 그 상황에 맞는 코드를 제안하는 방식으로 서비스를 제공받을 수 있다. 코 파일럿이 작동하는 기본 원리는 기존의 NLP 모델과 크게 다르지 않다. 깃허브의 수많은 공개된 코드들을 가져다가 학습하여 현재 context에서 다음에 나올 가장 잘 맞는 코드를 제안하는 것이다. 이 공개 코드들을 어떤 식으로 가공하여 학습 데이터 세트를 만들고 학습시켰는지에 대해서는 명확하게 알려져 있지 않지만 통상의 NLP 문제와 마찬가지로, 적절한 입력(현재 코드 context)과 답안(제안할 코드)을 구성할 수 있다면 그에 최대한 비슷하게 코드를 작성할 수 있을 것으로 예상할 수 있다

. 다만 FAQ에서 확인할 수 있듯이 코 파일럿이 제안한 코드가 오류 없이 빌드된다는 것을 보장하지 않으며 사용자가 원하는 코드라는 것도 보장하지 않는다. 또한 많이 사용되는 기능은 공개 코드들도 풍부하므로 어느 정도 의미 있는 코드를 얻을 수 있지만, 많이 사용되지 않는 기능들은 학습 데이터가 적어서 전자보다 원하는 결과를 얻기 어렵다. 이런 점을 보았을 때 코 파일럿은 코딩하는 AI라기보다는 code completion이나 visual assist의 연장선상에서 기존의 코드 제안 기능을 좀 더 지능화한 도구라 할 수 있다.

그리고 코 파일럿의 결과는 수많은 공개 코드들에서 구현된 개발자들의 합의에 가까운 내용이다. 즉 ‘공개 코드를 개발하는 사람들은 이런 주제에 대해 대략 이런 식으로 코딩한다’에 가깝다. 새로운 기술이나 개념이 등장하면 처음에는 다양한 유형의 접근법이 시도되지만 시간이 지나면서 어느 정도 정형화된 코드가 만들어지기 때문에 코 파일럿은 사람들이 많이 코딩하는 주제에 대한 모범 답안에 가까운 코드를 제안할 수 있을 것이다. 알파 코드(AlphaCode) 알파 코드는 코 파일럿에서 한 걸음 더 나아가서, 문제를 자연어로 정의하면 그에 해당하는 답 코드 전체를 생성해 주는 설루션이다. 필자도 관심이 생겨서 그 내용을 좀 들여다보았는데, paper 자체는 70p 정도로 상당한 분량이지만 후반부 절반은 레퍼런스와 상세한 결과물을 포함한 부록이므로 실제 중요한 부분은 전반부의 절반이다. 알파 코드가 대상으로 하는 것은 Competitive Programming이라는 분야의 대회 문제들로, 정의된 문제를 주고, 주어진 Input에 대해 정해진 Output이 나오도록 코딩하는 것이다. 즉 문제의 Input을 주었을 때 지정된 Output이 나온다면 pass 되었다고 보고 그렇지 않으면 fail 되었다고 본다. 이런 종류 대회들의 역사는 매우 오래되었으며 CodeForces나 TopCoder, Google Jam, Kaggle 같은 플랫폼들이 대중적으로 알려져 있다. 최근에는 개발자를 채용하기 위해 Competitive Programming 대회를 여는 일도 드물지 않은데, 이를 통해 주로 응시자의 알고리즘 구현 능력을 보게 된다. 이런 대회는 일반적으로 문제를 정의하고 Input과 그에 따르는 Output을 준 후, 코드의 평가에 사람이 개입하지 않고 온라인에서 정해진 규칙에 의해 자동으로 점수가 매겨진다. 따라서 알파 코드가 이런 문제를 스스로 풀어서 답안을 제출할 수 있다면 온라인 시스템은 사람이거나 기계이거나 관계없이 코드의 결과만을 평가할 것이고, 이 대회에 참가하는 사람들 중 어느 정도 수준인지를 판단하는 일이 가능할 것이다. 기본적으로는 코 파일럿과 동일하게 깃허브의 공개 코드들을 가져다가 학습한다. 처음부터 타깃이 되는 코드를 학습하는 건 아니고 c++, python 등 코드를 Massive Language Model 학습시키는 방식으로 pre-train 한다. 이후 fine-tuning을 거쳐 실제 모델을 만들어내는데, 학습시키는 데이터에서 input은 자연어로 정의된 문제, output은 그에 해당하는 각종 언어별 코드다. 즉 알파 코드는 이 문제를 자연어 처리의 sequence-to-sequence로 보고 푸는 것이다. 본질적으로는 기계번역과 크게 다르지 않으며, 자연어 token의 sequence를 코드의 sequence로 번역하는 작업과 유사하다. 실제 문제를 풀 때는 하나의 답을 바로 도출하는 것은 아니고, 조건을 바꾸어 가면서 수천~수백만에 이르는 크기의 잠재 답안(샘플)을 얻은 후 이 중에서 문제의 테스트를 pass 할 수 있는 것만을 필터링한다.  이 단계에서 99%의 샘플이 걸러지지만 이렇게 해도 수천 개의 샘플이 남는다.  이 중에 다시 최대 10개까지의 샘플을 골라낸 후 실행하고 평가하여 최종 답안을 제출하게 된다. 모델 자체도 대단히 크지만 학습시킬 데이터의 양도 방대하고, 모델이 바로 답을 내는 것이 아니며 큰 잠재 답안 군을 생성한 후 필터링하는 식이라 실제 사용 시 아주 많은 자원을 소모하는 일이 불가피할 것이다. 하지만 그렇다고 하더라도 자연어로 정의된 알고리즘 문제를 상위 53.4%, 즉 해당 대회에 참가하는 평균적인 개발자 수준으로 풀어낼 수 있다는 건 놀라운 일이 아닐 수 없다.  알파 코드의 한계 알파 코드가 대단한 성과를 낸 것은 사실이나, 아직까지 그 한계도 분명하다. 대표적으로 알파 코드는 긴 코드 작성에 어려움이 있을 것으로 추정하는데, 최종 코드가 길어지면 그만큼 예측해야 하는 token의 수가 늘어나고, 정확도를 맞추기 위해서는 필요한 샘플 군의 크기가 증가할 수밖에 없기 때문이다. 뉴욕대학교의 어니스트 데이비스(Ernest Davis) 교수에 따르면 알파 코드는 20줄짜리 코드를 얻기 위해 백만 개의 샘플 설루션을 만들어야 하며 코드의 길이를 200줄로 늘리면 10의 60승 개까지의 샘플이 필요할 수 있다. 일반적인 개발자가 그 정도의 코드를 작성하는데 필요한 시간을 생각하면 실무에 적용하기에는 너무 비효율적인 것이다. 또 알파 코드가 문제를 풀 수 있는 영역은 순수한 알고리즘으로 결과를 도출하는 분야에 국한된다. 개발 실무에서는 순수한 알고리즘만으로는 서비스를 만들 수 없고 여러 가지 다양한 라이브러리와 설루션들을 사용하는데, AI는 어떤 설루션을 사용할지 스스로 결정할 수 없기 때문에 사람이 이들을 모두 판단해 주어야 한다. 간단한 문제 같지만 DB를 MySQL로 할지 PostgreSQL로 할지 결정하는 것만 해도 우리는 매우 여러 가지 조건을 검토한다. 각 설루션에 대한 개발팀의 숙련도, 사용할 라이브러리의 지원 여부, 성능, 운영과 유지 보수에 들어가는 비용 등 한 가지 DB를 선택하는 문제만 해도 이렇게 고려할 내용이 많다. 더 복잡한 시스템이라면 판단할 내용은 더욱 늘어난다. 프라이빗 블록체인 프로젝트라면 합의 알고리즘으로 PBFT를 쓸 것인지 Raft를 쓸 것인지, 인증 프로세스를 별도로 구동할 것인지 아니면 인증서만으로 운영할 것인지 등 시작 전에 여러 가지 내용을 결정해야 한다. 영상 인식을 한다면 모델의 프레임워크로 pytorch를 쓸 것인지 tensor flow나 keras를 쓸 것인지, CNN을 쓸 것인지, 아니면 Vision-Transformer를 쓸 것인지 모든 것들이 의사 결정의 대상이다. 그렇기 때문에 프로그래밍과 IT 시스템 설계는 고도의 정신노동이고 그 사람이 지금까지 학습하고 경험한 모든 내용들을 다 총합하여 판단하게 된다. 지금까지는 AI가 이런 종류의 의사 결정을 하는 건 불가능해 보이므로 이 부분은 여전히 사람의 몫으로 남아 있다. 이외에도 AI가 개발을 하기 위해서는 문제를 명확하게 정의하는 것이 필요한데, 실제 필드에서의 개발 업무는 대단히 많은 모호함과 아직 결정되지 않은 요소들로 가득 차 있다. 어떤 부분은 실무자가 설명하지도 않고 문서도 존재하지 않는 묵시적 도메인 지식을 사용하여 채워야 한다. 개발 업무는 단순히 알고리즘의 구현만으로 끝나지 않는 것이다. 출처 : CCTV 뉴스(http://www.cctvnews.co.kr)

 

모든 오픈 소스의 총합....코드의 문제에 대해서는 알아서 하시라...^^

반응형

'IT최신 트랜드' 카테고리의 다른 글

디지털 노마드  (0) 2022.05.04
스마트스토어 상세페이지 작성 시나리오 및 툴  (0) 2022.04.26
스마트스토어 뷰건수 확인 사이트  (0) 2022.04.25
에드센스  (0) 2022.04.20
Buildbox 빌드박스  (0) 2022.04.20

댓글