<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DopeorNope 개발일지</title>
    <link>https://punctuate.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 22 May 2026 18:08:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DopeorNope</managingEditor>
    <item>
      <title>POSTECH 인공지능대학원 합격수기1</title>
      <link>https://punctuate.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 포항공대, 인공지능 대학원 서류 및 필기 합격 수기를 작성하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 필자의 학력은, 입결기준 건동홍 라인으로 입학했으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전공은 산업공학계열 1전공, 경영 2전공으로 하여서 대학교를 다녔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2전공이 경영이라 너무 쫄렸다. 다만, 나는 혼자 수학공부를 많이 했고, 선대수, 이산수학, 미분방정식, Calculus, 공학수학, 통계, 확률론, 최적화를 다루는 경제수학, 게임이론, 그래프이론 등 수학관련 수업을 일부러 찾아들으며, 여러 학생들의 두뇌에 저사람 뭐지(?)라는 인상을 많이 남기며 학교를 다녔었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;전공 GPA는 4.37, 전체 GPA는 4.24정도 된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학부 연구원 및 여러 &lt;b&gt;연구 경험이 3년&lt;/b&gt;정도 있었고, 인공지능 경진대회 관련 &lt;b&gt;상장은 한 3개정도 보유&lt;/b&gt;하고 있으며, &lt;b&gt;논문은 3개정도 주저자2개 공저자 1개 있다(SCI 2개, 국내 컨퍼런스 1개).&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 &lt;b&gt;유명 라이브러리의 공헌자&lt;/b&gt;로 등록되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포스텍 인공지능의 경우, 미디어 AI 및 AI 이론에 관련해서 국내에서 견줄곳이 없는 수준이다 보니, 좀 걱정이 많이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다 보니 서류 준비를 정말 열심히 했는데, 서류 관련해서 아래와 같이 정리 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;자기소개서 및 연구 계획서&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기소개서와 연구 계획서의 경우는, 매우 컴팩트 하게 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대한 미사여구를 제외하고, 내가 어떻게 연구를 시작하고, 어떤 연구를 했는지, 그러면서 여기서 왜 포스텍에 가고 싶었는지를 적었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 나는 포스텍과 공동 연구경험이 좀 있어서, 이를 활용하여서 내가 솔직하게 느끼는 것들을 잘 담았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 기존 내 연구들을 잘 녹이고, 내 실적들을 최대한 미사여구를 제외하고 적었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구계획서의 경우는 내가 막연히 뭐가 하고싶다가 아닌, 왜 이걸 하고 싶은지 작성하는 걸 시작으로 작성하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구 경험이 많아서, 나는 이걸 꽤 진솔하고 명확하게 작성할 수 있었고, 최근 논문 동향들을 파악하고 있어서 작성하면서 동시에 한계점을 말하고 이런걸 극복하고 싶다는 방향으로 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 왜 중요 하나면, 결국 내가 무얼 연구할것이고 어떤 문제를 어떻게 해결할지를 명확하게 보여주는데에 포커스를 두어야 하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 연구의 깊이가 나오기 때문에, 나는 이를 로지컬하게 작성하는데 집중했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;우수성 입증 자료&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 나는 우수성 입증자료가 180페이지 정도 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거 내 연구 포트폴리오, 상장, 나온 보도자료, 논문, 보고서, 연구 참여 확인서, 추천서 등을 다 합치니 180페이지 정도 나와서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 효율적이고 효과적으로 정리하여 제출하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 두서없이 업로드 하는것 보다는, 누가 보는지가 중요한 영역이기에, 이를 신경써서 준비했던것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 오탈자 다 검증하고, 문법 교정하고, 제출 완료.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 6시 발표라는걸 알고 있었는데, 교수님 회의이후 결과가 발표가 나다보니, 한 6:40분쯤 메일이 날라왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8ovsN/btsHgaHqJVm/16XMPY8U6ydUkXuDKfvM6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8ovsN/btsHgaHqJVm/16XMPY8U6ydUkXuDKfvM6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8ovsN/btsHgaHqJVm/16XMPY8U6ydUkXuDKfvM6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8ovsN%2FbtsHgaHqJVm%2F16XMPY8U6ydUkXuDKfvM6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;80&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;호올리... 솔직히 많이 걱정이 되었다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 내가 보여주었던 퍼포먼스들을 믿었기에.. 이제 2차 필기 시험을 준비하기로 결심했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두가지 교재를 가지고 시험을 보는데 교재와 시험범위는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;- 교재: &amp;ldquo;Algorithms&amp;rdquo;, Sanjoy Dasgupta, Christos Papadimitriou, Umesh&amp;nbsp;Vazirani, McGraw-Hill, 2008.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;시험범위&lt;span&gt;: Chapter 2,3,4,5,6&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기초수학&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f89009;&quot;&gt;- 교재: &quot;Mathematics for Machine learning&quot;, Marc Peter&amp;nbsp;Deisenroth,&amp;nbsp;A.Aldo&amp;nbsp;Faisal, Cheng Soon Ong&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;시험범위&lt;span&gt;: Part1&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두가지를 간략하게 요약하면, 알고리즘은 수도코드 분석 및 관련한 것들을 증명하는 내용 위주로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기초수학은, 그냥 기본적으로 알아야 하는것들이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필기 준비의 자세한 것은 다음 포스트에서 한번 나눌 수 있도록 하겠다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어우 힘들었다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 연구 참여 확인서나, 연구참여서는 경력사항으로 넣어도 되니 거기다가 넣어도 됨...&lt;/p&gt;</description>
      <category>잡다한 것들</category>
      <category>postech</category>
      <category>postech 인공지능대학원</category>
      <category>postech인공지능</category>
      <category>대학원준비</category>
      <category>대학원합격</category>
      <category>포스텍 ai</category>
      <category>포스텍 인공지능 대학원</category>
      <category>포스텍인공지능</category>
      <category>포항공대인공지능</category>
      <category>포항공대인공지능대학원</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/14</guid>
      <comments>https://punctuate.tistory.com/14#entry14comment</comments>
      <pubDate>Wed, 8 May 2024 15:33:00 +0900</pubDate>
    </item>
    <item>
      <title>llama.cpp로 양자화 하기 GGUF</title>
      <link>https://punctuate.tistory.com/13</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;120b짜리 모델을 굽고 있는 와중, 아 도저히 내 서버로는 감당이 안되는 크기라 양자화를 시도해야 하겠다는 생각이들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(현재 사용하고 있는 서버는 A100 40GB * 8)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 어떻게 llama.cpp로 양자화를 하는지 에러 수정 및 구현 방법을 기술하도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 llama.cpp에서 제공하는 양자화 지원 범위는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CdzaT/btsGmuZEyMJ/u0p6dTD5n0qjkL9DIiZ6vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CdzaT/btsGmuZEyMJ/u0p6dTD5n0qjkL9DIiZ6vK/img.png&quot; data-alt=&quot;(출처: https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#quantization)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CdzaT/btsGmuZEyMJ/u0p6dTD5n0qjkL9DIiZ6vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCdzaT%2FbtsGmuZEyMJ%2Fu0p6dTD5n0qjkL9DIiZ6vK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;427&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(출처: https://github.com/ggerganov/llama.cpp?tab=readme-ov-file#quantization)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 나는 4bit 양자화에 대해선 약간의 불안감이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는, 우선 8bit까지는 어느정도 성능이 괜찮은데, 4bit로 가니 외계어를 밷는 경험을 좀 했기 때문에.. 성능 위주면 8bit를 추천..합네다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 llama.cpp를 빌드하는 법을 알려줄 수 있도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자는 리눅스 기반의 공용서버를 활용하고 있기 때문에, 리눅스 기반으로 설명하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. lamma.cpp 깃허브 레포 다운&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712133833401&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 레포 다운
git clone https://github.com/ggerganov/llama.cpp.git
# 다운 폴더로 이동
cd llama.cpp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tip 만약 본인의 서버에서 git이 없다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 하면 됨 (거의 초기 설정이라 가정하고 하겠습니당).&lt;/p&gt;
&lt;pre id=&quot;code_1712133949300&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 루트권한 실행하기 위해서
su

# 패키지 다운위해 업데이트
apt-get update

# sudo 패키지 다운
apt-get install sudo

# git 패키지 설치
sudo apt-get install git&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. llama.cpp 빌드하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;여기서는 조금 할 말이 많다. 우선 첫번째, 리눅스 기반은 두가지로 접근할 수 있는게 있는데, 첫번째는 make와 Open Blas로 빌드하는 방법이고 두번째는 cmake로 빌드하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 make로 빌드하는 법을 알려주도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 간단하다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712134113576&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;make LLAMA_OPENBLAS=1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 여기서 만약 다음과 같은 에러가 발생하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ECOHu/btsGmAS5AUg/K1u1vbr9NdKgYzJpiJuvUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ECOHu/btsGmAS5AUg/K1u1vbr9NdKgYzJpiJuvUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ECOHu/btsGmAS5AUg/K1u1vbr9NdKgYzJpiJuvUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FECOHu%2FbtsGmAS5AUg%2FK1u1vbr9NdKgYzJpiJuvUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1111&quot; height=&quot;130&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 에러는 open blas로 빌드하려는데 관련 패키지가 없기 때문에 생기는 에러고 만약 이 에러면 다음과 같이 실행하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712134234585&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get install libopenblas-dev&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 아마 위 에러는 해결 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 아주 안정적인 빌드가 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이후에 또 다른 에러가 발생한다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDqWf/btsGlQWsmvh/hNIK1zmLKKvdgE22nri001/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDqWf/btsGlQWsmvh/hNIK1zmLKKvdgE22nri001/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDqWf/btsGlQWsmvh/hNIK1zmLKKvdgE22nri001/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDqWf%2FbtsGlQWsmvh%2FhNIK1zmLKKvdgE22nri001%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;250&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 경험한 에러는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;open-blas의 문제이긴 한데, 직접 패키지 코드를 수정해주면 되는데, 이건 너무 귀찮다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(왜냐 커맨드 라인으로 하나하나 수정하기는 매우 귀찮고 삑나면 스트레스가 많기 때문에)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면, 이럴때는 cmake로 빌드하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712135267248&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# build용 디렉토리 생성
mkdir build
# 디렉토리 이동
cd build

# cmake로 빌딩
cmake ..
cmake --build . --config Release&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 아마 llama.cpp가 빌딩이 완료 되었다고 뜰 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;사용&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 양자화를 하기 위해서는 다음과 같이 실행하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1712135440850&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 예시용 모델 로컬로 다운
huggingface-cli download upstage/SOLAR-10.7B-v1.0 --local-dir=./SOLAR-10.7B-v1.0

# 모델 변환후 models에 저장
python3 convert.py models/SOLAR-10.7B-v1.0/

#양자화 진행
./quantize ./models/SOLAR-10.7B-v1.0/ggml-model-f16.gguf ./models/SOLAR-10.7B-v1.0/ggml-model-q8_0.gguf q8_0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이지하게 한번 해보시길 바랍니다...&lt;/p&gt;</description>
      <category>에러 노트</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/13</guid>
      <comments>https://punctuate.tistory.com/13#entry13comment</comments>
      <pubDate>Wed, 3 Apr 2024 18:17:02 +0900</pubDate>
    </item>
    <item>
      <title>한국어 LLM 개발일지1</title>
      <link>https://punctuate.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우선 영어로 훈련된 모델들에 대해서, 새로운 언어에 대해 new adaption을 시키는건 많이 시도되었지만, 명확한 방법이 나오지 않아, 이렇게 시도 해보며 남겨본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;우선 기존의 Upstage의 solar나, 다른 technical report를 보면, mistral base의 모델의 파라미터를 증가 시켜서 훈련시키는 것은 성능향상을 보여주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 SOLAR같은 경우는, 너무 리더보드용으로 최적화 되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나는 그렇게 달갑지는 않은데, 나는 좀더 실제적으로 활용도가 높은 모델을 개발하고 싶은 마음이 정말 크다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 Makr AI의 새로운 한국어 모델을 처음부터 끝까지 빌딩하는 개발일지를 남겨본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 나는 Mistral AI의 모델인 Mistral instruct v1 7B (32k짜리) 모델의 레이어 하나하나를 병합하여 10.7B로 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2305.07759&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2305.07759&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705354615167&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;TinyStories: How Small Can Language Models Be and Still Speak Coherent English?&quot; data-og-description=&quot;Language models (LMs) are powerful tools for natural language processing, but they often struggle to produce coherent and fluent text when they are small. Models with around 125M parameters such as GPT-Neo (small) or GPT-2 (small) can rarely generate coher&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2305.07759&quot; data-og-url=&quot;https://arxiv.org/abs/2305.07759v2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cjCE0A/hyU5TjYZgG/sG4WmYeKgiJ0WoTOtkBO8K/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/6j3Ge/hyU5KUUXVI/DEktKQV8xpymeGH8jqo2K0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2305.07759&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2305.07759&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cjCE0A/hyU5TjYZgG/sG4WmYeKgiJ0WoTOtkBO8K/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/6j3Ge/hyU5KUUXVI/DEktKQV8xpymeGH8jqo2K0/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;TinyStories: How Small Can Language Models Be and Still Speak Coherent English?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Language models (LMs) are powerful tools for natural language processing, but they often struggle to produce coherent and fluent text when they are small. Models with around 125M parameters such as GPT-Neo (small) or GPT-2 (small) can rarely generate coher&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크는, Tiny Stories라는 논문으로, 여기서 흥미로운 점은, 모델의 앞쪽 레이어는 언어본능에 가까운 능력과 연관이 되어 있고, 중간 레이어는 추론능력, 마지막 레이어는, 구체적 사실에 대한 연관성이 높은걸로 보인다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 나는 이런점에서 미스트랄 모델의 추론력은 . 더 키우고,&amp;nbsp; 언어를 받아들이는 것은 새로 해야 하기에, 앞쪽의 레이어들을 초기화 하였으며 동시에 이 레이어들을 하나씩 쌓아 올라 10.7B로 키워주었다. (다 생각을 가지고 근거있이&amp;nbsp; 한 행동임...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다음에&amp;nbsp; 한것이, 바로 토크나이저의 Vocab확장.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://zenn.dev/tokyotech_lm/articles/d6cb3a8fdfc907&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://zenn.dev/tokyotech_lm/articles/d6cb3a8fdfc907&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705353547597&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Swallow: LLaMA-2 日本語継続事前学習モデル&quot; data-og-description=&quot;藤井一喜 Tokyo Institute of Technology B4 情報理工学院 情報工学系 横田研究室 High-Performance Computing, 分散並列学習&quot; data-og-host=&quot;zenn.dev&quot; data-og-source-url=&quot;https://zenn.dev/tokyotech_lm/articles/d6cb3a8fdfc907&quot; data-og-url=&quot;https://zenn.dev/tokyotech_lm/articles/d6cb3a8fdfc907&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vSCQ2/hyU5Qgvgoc/qe6buS1aESOqx1TqaYKdSK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b2Co8Y/hyU5RsXGSa/uqAYuZLTE44GYsPPAS3R7k/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024,https://scrap.kakaocdn.net/dn/vLajQ/hyU5JIqL4U/tcSXZZ5NfyfaKxrUIP7fA0/img.png?width=1400&amp;amp;height=735&amp;amp;face=0_0_1400_735&quot;&gt;&lt;a href=&quot;https://zenn.dev/tokyotech_lm/articles/d6cb3a8fdfc907&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://zenn.dev/tokyotech_lm/articles/d6cb3a8fdfc907&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vSCQ2/hyU5Qgvgoc/qe6buS1aESOqx1TqaYKdSK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/b2Co8Y/hyU5RsXGSa/uqAYuZLTE44GYsPPAS3R7k/img.png?width=1024&amp;amp;height=1024&amp;amp;face=0_0_1024_1024,https://scrap.kakaocdn.net/dn/vLajQ/hyU5JIqL4U/tcSXZZ5NfyfaKxrUIP7fA0/img.png?width=1400&amp;amp;height=735&amp;amp;face=0_0_1400_735');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Swallow: LLaMA-2 日本語継続事前学習モデル&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;藤井一喜 Tokyo Institute of Technology B4 情報理工学院 情報工学系 横田研究室 High-Performance Computing, 分散並列学習&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;zenn.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 글을 테크니컬 리포트중, 일본어 new adaption시키는 것에 대한 글이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2401.01055&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/abs/2401.01055&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705355129519&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;LLaMA Beyond English: An Empirical Study on Language Capability Transfer&quot; data-og-description=&quot;In recent times, substantial advancements have been witnessed in large language models (LLMs), exemplified by ChatGPT, showcasing remarkable proficiency across a range of complex tasks. However, many mainstream LLMs (e.g. LLaMA) are pretrained on English-d&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/2401.01055&quot; data-og-url=&quot;https://arxiv.org/abs/2401.01055v2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yiaXC/hyU5K8p0Rg/4acbYQcQ5HZ4gDkLbc8tRK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/cfTXoK/hyU5HjycJu/xa0WvFnsWI0h3F6OjR60D1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/2401.01055&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/2401.01055&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yiaXC/hyU5K8p0Rg/4acbYQcQ5HZ4gDkLbc8tRK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/cfTXoK/hyU5HjycJu/xa0WvFnsWI0h3F6OjR60D1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;LLaMA Beyond English: An Empirical Study on Language Capability Transfer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;In recent times, substantial advancements have been witnessed in large language models (LLMs), exemplified by ChatGPT, showcasing remarkable proficiency across a range of complex tasks. However, many mainstream LLMs (e.g. LLaMA) are pretrained on English-d&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다른 논문으로, 다른 언어에 대한 데이터는 기존의 학습 데이터의 1%만 투자해도 금방올라오고, 엠베딩이 바뀌게 되면, 기존의 능력을 잃는다는 내용이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 토큰 확장은 필요가 없다 라는 내용이긴 하지만, 나는 이것보다 더 중요한 것이 한국어에 대한 더 효율적인 이해도를 지속적으로 높이기 위해서는, 한국어에 대한 new adaption을 위한 토크나이저의 어휘 확장을 해주어야 한다는 생각 이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 논문과 보고서의 내용과는 반대되지만, 한국어에 대한 확장이 되게 함으로써, 학습되는 토큰수를 확줄일 수있고, 이게 점점 누적되면 누적될 수록 더 향상된 모델이 될것이라는 기대치가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실질적으로 현재 한국어 리더보드를 보면, 보캡 확장한 모델들이 꽤 상위권을 휩쓸고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이렇게 기본이 되는 세팅을 준비해놓고.. 사전학습에 들어가게 된다...&lt;/p&gt;</description>
      <category>잡다한 것들</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/12</guid>
      <comments>https://punctuate.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 16 Jan 2024 06:51:55 +0900</pubDate>
    </item>
    <item>
      <title>[Deepspeed]assert len(set(t.dtype for t in tensors)) == 1에러 해결</title>
      <link>https://punctuate.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이놈의 Multi-GPU 훈련은 진짜 사람을 돌게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도대체 어디서 문제가 나는지 감도 안오는 경우가 많기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 결국 사람은 그렇게 찾아낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 에러가 나는 근본적인 이유를 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1828&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQh563/btsDoph2Ftf/jKYVz9BRpKpKnwJiK0nYA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQh563/btsDoph2Ftf/jKYVz9BRpKpKnwJiK0nYA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQh563/btsDoph2Ftf/jKYVz9BRpKpKnwJiK0nYA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQh563%2FbtsDoph2Ftf%2FjKYVz9BRpKpKnwJiK0nYA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1828&quot; height=&quot;374&quot; data-origin-width=&quot;1828&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브 이슈에 나와있던 글이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용인 즉슨, 보통 llm full-finetuning시 레이어 얼리는데 있어서, 옵티마이저 최적화 할만한 레이어가 없다는 것이라는것과 같다는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 솔직히 이것보다 더 근본적인 문제가 있는게, 지금 내가 fine_tuning하려는 하이퍼 파라미터들(트레이닝 옵션 혹은 모델 dtype)과 deepspeed의 config가 호환이 되지 않아서 그런거다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 어떻게&amp;nbsp; 해결할 것인가?&lt;br /&gt;&lt;br /&gt;방법은 은근히 간단하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 불러오는 모델 type이 bfloat16이라면, deepspeed config를 다음과 같이 설정해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 나는 zero3를 사용하기에&lt;/p&gt;
&lt;pre id=&quot;code_1705287300625&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;zero_optimization&quot;: {
    &quot;stage&quot;: 3,
    &quot;overlap_comm&quot;: true,
    &quot;contiguous_gradients&quot;: true,
    &quot;sub_group_size&quot;: 0,
    &quot;reduce_bucket_size&quot;: &quot;auto&quot;,
    &quot;stage3_prefetch_bucket_size&quot;: &quot;auto&quot;,
    &quot;stage3_param_persistence_threshold&quot;: &quot;auto&quot;,
    &quot;stage3_max_live_parameters&quot;: 0,
    &quot;stage3_max_reuse_distance&quot;: 0,
    &quot;stage3_gather_16bit_weights_on_model_save&quot;: true
  },
  &quot;bf16&quot;: {
    &quot;enabled&quot;: true
  },
  &quot;fp16&quot;: {
    &quot;enabled&quot;: false,
    &quot;auto_cast&quot;: false,
    &quot;loss_scale&quot;: 0,
    &quot;initial_scale_power&quot;: 32,
    &quot;loss_scale_window&quot;: 1000,
    &quot;hysteresis&quot;: 2,
    &quot;min_loss_scale&quot;: 1
  },
  &quot;optimizer&quot;: {
    &quot;type&quot;: &quot;AdamW&quot;,
    &quot;params&quot;: {
      &quot;lr&quot;: &quot;auto&quot;,
      &quot;betas&quot;: [
        0.9,
        0.999
    ],
      &quot;eps&quot;: 1e-08,
      &quot;weight_decay&quot;: &quot;auto&quot;
    }
  },
  &quot;gradient_accumulation_steps&quot;: &quot;auto&quot;,
  &quot;train_batch_size&quot;: &quot;auto&quot;,
  &quot;train_micro_batch_size_per_gpu&quot;: &quot;auto&quot;,
  &quot;wall_clock_breakdown&quot;: false
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 config를 수정해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 핵심은, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;fp16옵션을 꺼주는것&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안꺼주면 계속 질질 끌린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 float32이면 bf16은 꺼주고, fp16 enable을 auto로 세팅해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하 deepspeed는 정말 간편하고 좋으면서도 재앙과도 같다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>에러 노트</category>
      <category>Axotl</category>
      <category>DeepSpeed</category>
      <category>llm</category>
      <category>llm파인튜닝</category>
      <category>에러</category>
      <category>에러노트</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/11</guid>
      <comments>https://punctuate.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 15 Jan 2024 11:58:32 +0900</pubDate>
    </item>
    <item>
      <title>Multi-GPU 훈련시 Timeout 문제 해결법</title>
      <link>https://punctuate.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;torch는 분산학습 가지고 훈련하는데 매우 최적화가 잘되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 보통 이제 torch.distributed를 활용하여 분산학습을 시작하게 되는데, 가끔 훈련시 이러한 문제점을 발생하는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705272673557&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; Watchdog caught collective operation timeout: WorkNCCL(OpType=BROADCAST, Timeout(ms)=1800000) ran for 1808499 milliseconds before timing out.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 에러는 정말 단순하지만 보면 볼 수록 이해가 안가는 에러메세지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 에러메세지가 생기는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것은 바로, 기본적으로 분산학습을 활용하는 프레임워크로 accelerate를 활용하는데 여기에서 기본적으로 세팅되어 있는 시간이 30분이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 한작업을 수행하는데 최대 30분까지 기다려주는것이고 그 이상일때는 바로 에러메세지를 밷어낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이런 것을 어떻게 해결할 수 있는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 한줄이면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705272788972&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import datetime

dist.init_process_group(backend=&quot;nccl&quot;, timeout=datetime.timedelta(days=2))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 dist는 torch.distributed를 dist라는 이름으로 import 한것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 좀더 정확하게 작성해주면 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1705272852078&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch.distributed as dist
import datetime

dist.init_process_group(backend=&quot;nccl&quot;, timeout=datetime.timedelta(days=2))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 타임아웃 시간을 2일로 늘려주는데, 보통 긴 작업이 한 최대 1시간에서 2시간정도 걸리긴 하는데, 이건 상황에 맞추어 . 잘 활용하도록 하면 될것 같다.&lt;/p&gt;</description>
      <category>에러 노트</category>
      <category>Axotl</category>
      <category>llm</category>
      <category>llm파인튜닝</category>
      <category>timeout</category>
      <category>Torch</category>
      <category>torch.distributed</category>
      <category>에러노트</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/10</guid>
      <comments>https://punctuate.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 15 Jan 2024 07:56:14 +0900</pubDate>
    </item>
    <item>
      <title>[LLM,deepspeed, axotl]LLM 파인튜닝시, loss값이 올라가는 현상</title>
      <link>https://punctuate.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자 오늘 오전에는 이 미친 라이브러리 deepspeed가 axotl에 미치는 영향을 알아보고, 이를 해결하는 방법을 공유하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데, 이제 더 미친 문제가 하나 남겨져있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;훈련시키는 도중 나는 다음과같은 모습을 볼 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2786&quot; data-origin-height=&quot;1218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/U5mL2/btsDpc98NVC/NYIAVW105kFQULHrBgzkr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/U5mL2/btsDpc98NVC/NYIAVW105kFQULHrBgzkr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/U5mL2/btsDpc98NVC/NYIAVW105kFQULHrBgzkr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FU5mL2%2FbtsDpc98NVC%2FNYIAVW105kFQULHrBgzkr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2786&quot; height=&quot;1218&quot; data-origin-width=&quot;2786&quot; data-origin-height=&quot;1218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 wandb프로젝트에 다음과 같은 모습을 발견했는데, 여기서 주의할점이 step이 올라갈수록 loss값이 폭등하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 해결하기 위해서 정말 별의별 document를 확인하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러자 다음과 같이 문서를 찾을 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccZfJ9/btsDsYidSw5/kKTzBXknfNtQVF2hK7sq10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccZfJ9/btsDsYidSw5/kKTzBXknfNtQVF2hK7sq10/img.png&quot; data-alt=&quot;https://github.com/microsoft/DeepSpeed/issues/2077&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccZfJ9/btsDsYidSw5/kKTzBXknfNtQVF2hK7sq10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccZfJ9%2FbtsDsYidSw5%2FkKTzBXknfNtQVF2hK7sq10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1800&quot; height=&quot;566&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://github.com/microsoft/DeepSpeed/issues/2077&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 나는 lr_scheduler로 learning rate를 조금씩 낮춰가는 형상으로 훈련을 하고 있었는데, 음 비슷한 문제를 가진 내용이, lr와 loss와의 관계가 있다는 것이다. 값자기 exploding을 한다는 글이었고, 물론 나는 처음부터 exploding하였지만, 다른 문서들을 찾아보아도, weighted decay와 관련되었다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 내가 직접 허깅페이스 라이브러리로 bfloat16으로 훈련을 시키면, 최적화가 좀 잘된적이 많았지만, deepspeed를 활용하여 병렬처리로 훈련을 시키니, bfloat16을 활용하는 경우 loss값이 deepspeed에서는 이상하게 잘못 계산된다는 의견이 조금 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나는 d_type을 float32로 변경하였는데, 변경하니 다음과 같은 양상으로 변한걸&amp;nbsp; 알 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1874&quot; data-origin-height=&quot;1242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ucVO/btsDsYJiHg5/7MCaD1z2m8arSCEOmvpM41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ucVO/btsDsYJiHg5/7MCaD1z2m8arSCEOmvpM41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ucVO/btsDsYJiHg5/7MCaD1z2m8arSCEOmvpM41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ucVO%2FbtsDsYJiHg5%2F7MCaD1z2m8arSCEOmvpM41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1874&quot; height=&quot;1242&quot; data-origin-width=&quot;1874&quot; data-origin-height=&quot;1242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 미친 라이브러리는 누가 만든것인가....하...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무튼 axotl과 deepspeed를 활용하여 훈련시키는데 loss가 폭등하면 다음과 같이 활용하면된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;d_type을 float32로 변경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘도 빡친 하루였다.&lt;/p&gt;</description>
      <category>에러 노트</category>
      <category>Axotl</category>
      <category>DeepSpeed</category>
      <category>learning_rate</category>
      <category>llm</category>
      <category>llm파인튜닝</category>
      <category>loss</category>
      <category>러닝레이트</category>
      <category>사전학습</category>
      <category>파인튜닝</category>
      <category>학습</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/8</guid>
      <comments>https://punctuate.tistory.com/8#entry8comment</comments>
      <pubDate>Sat, 13 Jan 2024 17:57:16 +0900</pubDate>
    </item>
    <item>
      <title>Axotl &amp;amp; deepspeed zero3: 모델 레이어 불러올때 torch.Size([0]) 해결법</title>
      <link>https://punctuate.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 그냥 이걸 해결했긴 했는데, 진짜 머리가 찡하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 화가 무척 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 화가나느냐?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마이크로 소프트 이놈들은 deepspeed를 윈도우처럼 만들어놨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트도 느리고 github 레포에서 세달전에 올라온 버그 리포트도 아직까지 반영이 안되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 그럼 이번에 어떤주제냐면, LLM full-finetuning할때, 내가 몇개의 레이어는 얼리고 몇개는 풀고싶고 이렇게 튜닝하고 싶은 경우가 정말 많다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴때 자주 쓰이는 것은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;param.requires_grad = False 혹은 &lt;span style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;param.requires_grad = True&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 두개가 무엇이냐 하면은, 그 가중치에 gradient update를 할지 안할지 결정해주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이제 Axotl라이브러리 활용하셔 LLM을 full-fine tuning을 multi-GPU로 하고자 하면서 레이어를 얼려주고 풀어주고자 하면 다음과 같은 문제점이 발생한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705111433546&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;model.embed_tokens.weight
torch.Size([32000, 4096])


model.layers.8.self_attn.q_proj.weight
torch.Size([0])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 embed layer와 8번 레이어의 가중치를 업데이트 하고 나머지는 묶어주고자 하였는데 lm_head나 embed_tokens 텐서는 잘 불러와 지는데 나머지 레이어의 텐서는 인스턴스화 되지 않고 그냥 불러와 지지 않는 문제가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 여기서 나는 수많은 깃허브 이슈들을 읽으면서 내린 결론은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Deepseed의 zero3 문제&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Deepseed는 분산학습에서 매우 메모리를 효율적으로 설계하여 훈련시킬 수 있는 툴이다. 다만, 몇가지 그리고 많은 문제점들이 있지만...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 해결되면 매우 간편하고 효율적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데, 여기서 zero initialize를 하면서 명시적으로 인스턴스화 해주지 않고 불러오기 때문에, 모델 내부 레이어는 명시적으로 인스턴스화 되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 내가 인스턴스화 되지 않는 레이어를 풀어주고자 해도 절대로 안풀어지는 법...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 어떻게 해결해야 하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Axotl의 freeze.py를 보면 다음과 같이 코드가 작성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705111692110&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for param in model.parameters():

    param.requires_grad = False



for name, param in model.named_parameters():

    if any(pattern.match(name) for pattern in compiled_patterns):

        if is_main_process():

               LOG.debug(f&quot;unfreezing {name}&quot;)

        param.requires_grad = True&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 모든 레이어를 얼리고, 내가 풀고자 하는 레이어만 쓱 푸는것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데, 애초에 모델을 불러오는데에 있어서 모든 레이어는 required_grad가 True로 되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면, 굳이 얼리고 풀면서 생기는 저런 이슈를 마주쳐야 하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전혀 아니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스화 되지 않은것에 대해서 required_grad=True가 문제가 되지 사실 required_grad=False는 문제가 되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 어떻게 해결해야 하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705111846962&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# for param in model.parameters():
  # param.requires_grad = False

for name, param in model.named_parameters():
  if any(pattern.match(name) for pattern in compiled_patterns):
    if is_main_process():
        LOG.debug(f&quot;unfreezing {name}&quot;)
   # param.requires_grad = True
    
    pass
    
  else:
    param.requires_grad = False&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법은 발상의 거꾸로 전환이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 처음부터 얼리지말고, 내가 선택하고 싶은건 pass하고 내가 선택하지 않은 레이어만 얼려주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하... Axotl도 답답하다..... 하... 내 13시간.....&lt;/p&gt;</description>
      <category>에러 노트</category>
      <category>Axotl</category>
      <category>DeepSpeed</category>
      <category>error</category>
      <category>fine_tuning</category>
      <category>github</category>
      <category>llm</category>
      <category>torch_size</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/7</guid>
      <comments>https://punctuate.tistory.com/7#entry7comment</comments>
      <pubDate>Sat, 13 Jan 2024 11:13:08 +0900</pubDate>
    </item>
    <item>
      <title>RuntimeError: expected scalar type Half but found Float 에러 해결방법</title>
      <link>https://punctuate.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Axolotl에서 Pre-train 과정에서 다음과 같은 에러가 발생함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RuntimeError:&amp;nbsp;expected&amp;nbsp;scalar&amp;nbsp;type&amp;nbsp;Half&amp;nbsp;but&amp;nbsp;found&amp;nbsp;Float&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FP16으로 내가 불러와서 지금 Half(원래는 32비트 이기때문에, FP16은 Half임)로&amp;nbsp; 불러왔지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 지금 float이기 때문에 문제가 발생함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이럴경우 이와 같이 문제를 해결하면 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;train.py에서 아래와 같이 &lt;b&gt;trainer.train&lt;/b&gt; 하는 곳에서 'cuda'알아서 오토캐스트 해주면 데이터에 맞게 알아서 해결됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704132760946&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  if cfg.flash_optimum:
        with torch.backends.cuda.sdp_kernel(
            enable_flash=True, enable_math=True, enable_mem_efficient=True
        ):
            trainer.train(resume_from_checkpoint=resume_from_checkpoint)
    else:
        with torch.autocast(&quot;cuda&quot;): # 추가함
            trainer.train(resume_from_checkpoint=resume_from_checkpoint)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>에러 노트</category>
      <category>llm</category>
      <category>RuntimeError</category>
      <category>trainer</category>
      <category>에러</category>
      <category>파이썬</category>
      <category>해결법</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/6</guid>
      <comments>https://punctuate.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 2 Jan 2024 03:11:36 +0900</pubDate>
    </item>
    <item>
      <title>0. 시작에 앞서</title>
      <link>https://punctuate.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 블로그를 쓰는 이유는, 기존에는 많은 코드들과 많은 지식들을 통해서 모델들의 구조와 핵심 코어등을 다 이해하고 있었으나...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랜 연구와 문서작업이 갈 수록 많아지면서, 점점 희미해져가는 내 기억을 다시 부여잡기 위해 이렇게 작성한다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구를 하면서, 참 획기적인 생각들이구나 라는 생각이 들정도로 좋은 아이디어들이 많다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 어느순간 &quot;왜?&quot; 라는 생각이 들지 않기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연히 이러한 것들을 이해해야하는데, 점점 수동적인 학습과 지식이 쌓여져만 가는 것이다. 더 깊은 이해를 쌓기 위해 다시 한번 시작한다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜? 무슨 이유에서? 어떻게? 그래서 어떻게 구현해? 라는 질문들이 점점 사라지고, 어서 결과만 만들어내야지 하는 나의 썩은 정신을 뿌리채 뽑으려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전국 어디에서나 열심히 노력하는 사람들에게 힘이 될 수 있으며, 나에게도 큰 도움이 될 수 있도록 기대하며 이렇게 작성을 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 메이져 영역은 컴퓨터 비전쪽이며 앞으로 관련한 것들을 포스팅 하도록 하겠다.&lt;/p&gt;</description>
      <category>Deep Learning</category>
      <author>DopeorNope</author>
      <guid isPermaLink="true">https://punctuate.tistory.com/4</guid>
      <comments>https://punctuate.tistory.com/4#entry4comment</comments>
      <pubDate>Thu, 18 May 2023 20:30:59 +0900</pubDate>
    </item>
  </channel>
</rss>