You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

592 lines
16 KiB

WEBVTT
00:00.710 --> 00:06.830
구글 콜랩에 왔습니다 모델들과 즐길 준비가 됐죠
00:07.100 --> 00:13.640
먼저 Pip 설치와 수입 작업을 할 거예요
00:13.940 --> 00:18.710
이건 좀 더 오래 걸릴 거예요 이걸 녹음하기 전에 이미 비트를 써서
00:18.710 --> 00:21.440
실행했거든요 좀 더 빠르게요
00:21.530 --> 00:26.240
피프를 설치하는 데 30-1분이 걸릴 거예요
00:26.270 --> 00:29.450
피프 설치가 끝나면 얼굴 포옹으로 로그인해요
00:29.450 --> 00:30.800
이제 익숙해진 것 같네요
00:30.830 --> 00:35.330
왼쪽에 비밀이 담긴 토큰이 있으면 좋겠네요
00:35.570 --> 00:41.780
이제 상수를 설정하겠습니다 포옹 페이스 허브에서 함께 플레이할 모델들의 이름에
00:41.810 --> 00:42.950
대해서요
00:42.950 --> 00:48.350
늘 그렇듯 모델명 또는 모델 회수 회사명이죠
00:48.620 --> 00:52.370
3번과 피 2번과 라마와 놀 거예요
00:52.370 --> 01:00.290
연습 문제를 낼 테니 콴토와 함께 반복하세요 알리바바 클라우드의 위대한 LLM이죠
01:00.290 --> 01:03.190
미스트랄도 여기 있어요
01:03.220 --> 01:08.800
이건 너무 큰 모델이 될 수도 있어요 큰 GPU에 돈을 쏟아붓지
01:08.800 --> 01:11.020
않는다면요
01:11.110 --> 01:19.450
그럴 경우 H깅페이스 허브에 가서 80억 매개 변수가 넘는 모델을 찾아서
01:19.450 --> 01:23.110
그걸 대신 사용하세요
01:23.110 --> 01:29.410
마음에 드는 걸 고르거나 아니면 지금 인기가 있거나 잘 팔리는 걸 골라서 어떻게 해석할지
01:29.410 --> 01:30.100
보세요
01:30.100 --> 01:34.840
하지만 적어도 5개는 완성해야 해요
01:34.930 --> 01:42.220
이제 상수를 설정하고 메시지 목록을 만들게요 이 시점에서 우리가 잘 아는 형식으로요
01:42.220 --> 01:48.700
시스템 메시지와 사용자 메시지죠 목록의 2개 독점으로요
01:48.730 --> 01:51.640
더 설명할 필요 없어요
01:51.910 --> 02:02.540
지난번에 라마 3에 동의해야 했던 거 기억하죠? 한 가지 서비스 조건은 모델 페이지에서
02:02.690 --> 02:07.610
동의를 얻는 거예요
02:07.610 --> 02:15.380
아직 안 하셨다면 llama 3에 액세스할 수 있도록 하세요 모델은 하나예요
02:16.370 --> 02:18.740
이런 건 처음 봐요
02:18.740 --> 02:23.180
제가 언급했던 퀀타이즈라는 것에 대해 잠깐 얘기할게요 비트
02:23.180 --> 02:27.350
퀀타이즈는 놀라운 개념이에요
02:27.440 --> 02:35.480
이 모델의 경우 메모리에 로드하고 싶은데 그렇게 할 때
02:35.480 --> 02:42.500
모델을 구성하는 무게의 정밀도를 줄이는 거죠
02:42.500 --> 02:46.130
이 무게추들은 보통 32비트 플로트예요
02:46.250 --> 02:51.650
32 비트 부양점 숫자는 이 심층 신경망의 무게예요
02:51.650 --> 02:55.490
덜 채워서 가져오면 어떨까요?
02:55.760 --> 02:59.320
32비트는 4바이트로 계산할 수 있고요
02:59.590 --> 03:08.350
그리고 숫자를 더 적어 넣는 게 좋을 것 같아요 less 메모리에요
03:08.650 --> 03:15.490
정밀도를 줄이는 이 과정을 퀀타이즈라고 합니다 모델에 거친 숫자가 더 많이
03:15.490 --> 03:17.080
보이게 하는 거죠
03:17.080 --> 03:19.930
그게 우리가 할 일이죠
03:19.930 --> 03:24.670
이 이야기를 처음 들었을 때 정말 놀랐던 기억이 납니다 처음에는
03:24.700 --> 03:32.530
32 비트 숫자를 8 비트 숫자로 대체하면 정확도가 훨씬 떨어진다고들 했거든요
03:32.530 --> 03:39.460
그 비트는 놀랍게도 정확도는 조금 떨어지지만 생각만큼 떨어지진
03:39.460 --> 03:41.320
않아요
03:41.320 --> 03:44.680
줄어들지도 않고 4배로 악화되지도 않아요
03:44.860 --> 03:51.550
좀 더 나빠지지만 견딜 만해요 메모리가 더 많다면 비트를 걸 만하죠
03:51.670 --> 03:56.800
그 말을 듣고 놀랐지만 그보다 더 많은 걸 할 수 있다는 걸 알고 더 놀랐어요
03:56.800 --> 04:01.760
8비트가 아니라 4비트로 졸일 수 있어요
04:01.760 --> 04:03.950
0.5 바이트예요 세어본다면요
04:04.220 --> 04:09.560
32비트 숫자를 4비트로 줄일 수 있어요
04:09.800 --> 04:17.600
다시 말하지만 정확도는 손상됐지만 기대만큼 크진 않아요
04:17.630 --> 04:21.500
완전히 다를 줄은 몰랐어요
04:21.500 --> 04:23.990
견딜 만해요
04:23.990 --> 04:29.870
훨씬 더 큰 모델이 메모리에 맞아 더 빨리 로드되고 더 빨리 달리게 해주죠
04:29.870 --> 04:33.710
사람들이 많이 하는 거죠
04:33.710 --> 04:39.560
강력한 도구예요 특히 훈련을 받거나 이런 모델로 많은 작업을 해야 할 때는요 get
04:39.560 --> 04:41.060
it get it
04:41.060 --> 04:43.190
퀀타이즈는 구세주예요
04:43.220 --> 04:48.590
기억하실지 모르겠지만 몇 주 후에 큐 로라라는 기술을 배울
04:48.590 --> 04:53.150
거예요 효율적으로 미세 조정하는 방법이죠
04:53.150 --> 04:57.760
Q의 로라, Q의 로라는 퀀타이즈를 뜻하죠
04:57.760 --> 05:01.720
그래서 이따금 다시 보게 될 거예요
05:02.350 --> 05:09.340
그동안 비트 앤 바이트라는 라이브러리를 사용합니다 포옹하는 트랜스포머 라이브러리와 밀접한
05:09.340 --> 05:10.480
관련이 있죠
05:10.510 --> 05:18.670
훌륭한 라이브러리예요 새 bits와 바이트 구성 객체를 만들 수 있죠 우리가 원하는
05:18.760 --> 05:22.720
수량화가 뭔지 곧 설명드릴게요
05:22.720 --> 05:27.490
로드 인 for 비트 = true라고 하죠
05:27.520 --> 05:29.020
50센트까지 쭉 내릴 거예요
05:29.020 --> 05:31.810
로드 인 8 비트 = true도 할 수 있어요
05:31.810 --> 05:36.370
대신 8bit를 하고 싶다면 둘 다 해서 차이를 확인할
05:36.370 --> 05:37.660
수 있죠
05:38.320 --> 05:41.260
이것도 정말 놀랍죠
05:41.260 --> 05:46.510
근데 4비트 퀀트 = True도 할 수 있어요
05:46.510 --> 05:51.760
한 번도 아니고 두 번씩 모든 무게를 수량화한다는 뜻이죠
05:51.790 --> 05:54.190
메모리를 좀 더 저장하려고요 비트
05:54.190 --> 06:02.210
이걸 다시 한다고 해서 결과의 정확성에 큰 영향을 주진 않아요
06:02.210 --> 06:05.300
좋은 거래고 사람들이 그렇게 해요
06:05.870 --> 06:13.340
이 데이터 형식 A와 B 16을 이용해 계산을 한다는 뜻입니다
06:13.520 --> 06:17.270
그러면 성능이 향상되죠
06:17.270 --> 06:19.280
이것도 꽤 흔한 일이에요
06:19.400 --> 06:27.290
여기서 중요한 건 숫자를 4비트로 줄였을 때 4비트 숫자를 어떻게
06:27.320 --> 06:32.510
처리하고 압축하는지에 관한 거죠
06:32.510 --> 06:37.490
이 NF4는 4비트로 숫자를 나타내요
06:37.490 --> 06:39.860
평범화됐다는 뜻이죠
06:39.860 --> 06:45.230
이런 숫자들을 고려하는 것과 관련 있다는 걸 압니다 일반적인
06:45.230 --> 06:51.200
분포를 따르려면 4비트로 압축할 때 더 정확할 수 있죠
06:51.230 --> 06:56.090
이 둘은 less로 보여요
06:56.110 --> 06:58.690
큰 변화를 기대하진 않아요
06:58.720 --> 06:59.170
둘은 운명이에요
06:59.200 --> 06:59.680
운명인 거죠
06:59.680 --> 07:01.030
설정이 좋네요
07:01.030 --> 07:03.490
이건 좀 달라요
07:03.490 --> 07:06.280
이건 메모리 면에서 큰 차이를 만들어요
07:06.280 --> 07:11.500
결과물 면에서는 나쁘지 않아요
07:11.530 --> 07:19.420
이 모든 대화로 우린 이제 퀀트 구성, 비트 및 바이트 구성을 만들었어요
07:19.480 --> 07:21.370
이건 우리에게 익숙한 거예요
07:21.400 --> 07:24.910
라마에게 토큰을 만들어 주려고요
07:25.450 --> 07:28.090
이 대사는 처음 언급하는 거예요
07:28.090 --> 07:37.240
패드 토큰이라는 것도 있는데요 신경망에 추가할 것이 있을 때 프롬프트를
07:37.240 --> 07:43.090
채우는 데 쓰이는 토큰이죠
07:43.180 --> 07:50.440
일반적인 관행으로 패드 토큰을 문장 끝, 프롬프트 토큰의 마지막과
07:50.470 --> 07:54.220
동일하게 설정하는 것이죠
07:54.370 --> 07:57.830
Get을 안 하면 경고를 받아요
07:57.860 --> 07:59.840
Get you 경고는 중요하지 않아요
07:59.840 --> 08:01.250
효과가 없는 것 같아요
08:01.250 --> 08:04.610
경고를 받고 싶지 않다면 get을 선택하세요.
08:04.640 --> 08:09.170
많은 코드에서 사람들이 표준으로 사용하는 것을 볼 수 있어요.
08:10.310 --> 08:10.970
08:10.970 --> 08:13.520
이제 토큰라이저를 사용할 거예요
08:13.520 --> 08:17.390
채팅 템플릿 적용 함수라고 부를게요
08:17.390 --> 08:23.930
그건 우리 메시지를 사전 목록으로 받아들여 토큰으로 변환하는 거죠
08:24.260 --> 08:28.820
그걸 GPU 위에 적용했어요
08:28.850 --> 08:33.080
get을 실행하면 토큰izer가 작동할 거예요
08:33.080 --> 08:37.520
다음으로 할 일은 모델을 로드하는 거예요
08:37.520 --> 08:39.950
이 선은 뭐죠?
08:39.980 --> 08:44.900
우선 이 대사와 아주 유사해요
08:44.900 --> 08:50.540
여기서 토큰라이저를 만들었는데 오토 토큰라이저. FROMpretrep이라고 입력했어요
08:50.570 --> 08:57.200
미리 배운 자동 LLM을 위한 모델을 생성하죠
08:57.290 --> 09:02.420
LLM을 생성하는 일반 클래스죠
09:02.450 --> 09:06.290
인과적 LLM은 자가적 공격 LLM과 같아요
09:06.290 --> 09:13.760
LLM은 과거의 토큰을 가지고 미래의 토큰을 예측하는 것이죠
09:13.760 --> 09:18.170
기본적으로 우리가 얘기한 모든 llm은 그런 종류의 LLM이었죠
09:18.170 --> 09:24.200
과정 후반부에 다른 종류의 LLM을 살펴보겠습니다 때때로 사용되는 거죠
09:24.200 --> 09:30.710
하지만 우리가 말하는 이런 생성적인 인공지능 사용 사례에선 인과적 llms 즉
09:30.710 --> 09:34.130
자동적 위반 llms를 연구할 거예요
09:34.130 --> 09:39.650
미리 훈련된 걸 이용해서 만드는 거죠
09:39.650 --> 09:42.560
토큰이처럼 모델 이름을 전달하는 거죠
09:42.560 --> 09:46.340
GPU가 있다면 그걸 사용하고 싶다고 하죠
09:46.370 --> 09:48.950
그게 Device Map 오토의 역할이죠
09:48.980 --> 09:57.590
그런 다음 퀀트화 구성에서 넘깁니다 방금 설정한 퀀트 구성요 그게 모델을 구축하는 방법이죠
09:57.620 --> 10:07.700
모델은 실제 코드입니다 즉, 소프트웨어로서의 큰 언어 모델로서 파이썬 코드로서 우리가
10:07.700 --> 10:09.440
실행할 것이죠
10:09.440 --> 10:11.720
그 아래는 피토치예요
10:11.750 --> 10:19.220
파이토치 층으로 구성돼 있어요 신경망 층으로 구성되어 있어서 입력값에 입력하면 출력이
10:19.220 --> 10:20.390
나오죠
10:20.390 --> 10:22.580
진짜 물건이네요
10:22.670 --> 10:28.520
이걸 실행하면 시간이 더 걸릴 거예요 방금 실행했으니까요 완전히 새로운
10:28.520 --> 10:32.330
상자처럼 많은 작업을 할 필요가 없었죠
10:32.360 --> 10:38.090
이걸 실행하면 실제로 발생하는 일은 다운로드예요
10:38.090 --> 10:39.650
얼굴을 안는 것과 연결되죠
10:39.680 --> 10:46.190
Hub에서 모델 무게를 다운로드해 Google Colab 인스턴스의
10:46.190 --> 10:54.460
디스크에 로컬로 놓습니다 이 박스의 데스크에 있는 임시 파일 캐시에요 나중에 이 박스와 연결을
10:54.460 --> 11:01.540
끊으면 삭제됩니다 이 모델은 이제 일시적으로 디스크의 박스에 저장됩니다 메모리에
11:01.540 --> 11:07.660
로드되기도 해서 우리가 사용할 수 있게 되죠
11:07.660 --> 11:12.940
모델에게 물어볼 수 있어요 get 메모리풋프린트를 호출해 메모리를 얼마나 사용하는지요
11:12.940 --> 11:15.100
뭐라고 하는지 보죠
11:15.100 --> 11:19.510
이 모델의 메모리 공간은 약 5개라고 나오네요 5기가바요
11:19.840 --> 11:28.030
이 박스에 대한 리소스를 보면 약 5개를 사용하는 걸 보실 수 있어요 상자는 5GB로 하고요
11:28.030 --> 11:31.210
이미 실행하고 있었기 때문에 과거에도 흔들리고 있어요
11:31.450 --> 11:35.740
하지만 자세히 보면 이 아래부터 시작해서 5.5cm까지
11:35.740 --> 11:37.000
올라갈 거예요
11:37.000 --> 11:42.700
디스크에서 많은 공간을 사용하고 있습니다 디스크 캐시에 로드되어 있기 때문이죠
11:43.690 --> 11:44.560
11:44.590 --> 11:47.350
황금 시간대 준비가 거의 다 됐어요
11:47.350 --> 11:51.250
먼저 모델 자체를 살펴보죠
11:51.430 --> 11:54.210
모델을 프린트함으로써 그렇게 하죠
11:54.990 --> 12:04.080
모델을 프린트하면 이 모델 객체에 의해 표현되는 실제 심층 신경망에 대한 설명이
12:04.080 --> 12:05.370
나와요
12:05.370 --> 12:06.990
여기 보이는 게 그거예요
12:06.990 --> 12:12.720
딥 신경망 층을 나타내는 코드 층이에요
12:12.720 --> 12:19.140
이건 전부 PyTorch 클래스를 보여줍니다 모델에 의해 참조되는
12:19.140 --> 12:20.730
설정이죠
12:21.210 --> 12:26.460
다시 말씀드리지만 실습 시간이라 가끔 이론만 살짝 다룰 거예요
12:26.460 --> 12:31.320
하지만 깊은 신경망과 그 층의 내장에 대한 지식 수준에 따라 살펴볼
12:31.320 --> 12:32.700
가치가 있어요
12:32.700 --> 12:34.740
익숙한 내용도 있을 거예요
12:34.740 --> 12:40.230
토큰을 심는 레이어에서 시작한다는 게 익숙하실 겁니다 토큰을 신경망에
12:40.230 --> 12:41.820
심는 방법이죠
12:41.820 --> 12:47.280
이걸 상상해 보세요 단어의 입체성을 나타내는
12:47.280 --> 12:49.170
거예요
12:49.620 --> 12:56.680
그리고 모듈이 여러 개 있는 게 보이시죠 신경망의 각 레이어예요
12:56.710 --> 13:04.060
예상했던 대로 주의 깊게 보는 층이 있어요 특히 주의 깊게 보는 게 가장 중요하잖아요
13:04.090 --> 13:08.890
종이에 쓰여 있듯이 주의만 기울이면 돼요 이런 주의 층이 트랜스포머를
13:08.920 --> 13:11.350
트랜스포머로 만드는 핵심이죠
13:11.350 --> 13:17.230
그리고 다중 페르셉트론 층이 여기 있어요
13:17.230 --> 13:19.690
활성화 함수가 있어요
13:19.690 --> 13:24.340
이 이론에 더 익숙한 사람들은 이걸 보길 기대하겠죠
13:24.340 --> 13:32.860
이 llama 3이 사용하는 활성화 함수죠 1번 모델은 리루 활성화 함수로
13:32.860 --> 13:40.570
구형 아니 선형 유닛으로 여기 문서화에 나와 있죠
13:40.750 --> 13:43.900
스위시 함수라고도 알려져 있죠
13:44.080 --> 13:49.300
기본적으로 물적 X의 X 곱하기 X죠
13:49.300 --> 13:52.190
활성화 함수는 이렇게 생겼어요
13:52.220 --> 13:57.020
심층 신경망 이론에 관심이 있다면 이게 뭔지 정확히 알 거예요
13:57.050 --> 13:59.300
아니라면 걱정하지 마세요
13:59.300 --> 14:05.630
여기서 무슨 일이 일어나는지 전반적으로 파악하세요 이 모델이나 나중에 다른 걸 연구할
14:05.630 --> 14:09.200
때 더 자세히 살펴볼 수 있는 거죠 Get it
14:09.890 --> 14:17.690
그 끝에는 표준 층이 있고 그 끝에는 직선
14:17.690 --> 14:20.360
층이 있어요
14:21.170 --> 14:29.300
이건 특별히 살펴볼 가치가 있어요 피터치 신경망에 대한 지식이
14:29.300 --> 14:30.560
있다면요
14:30.770 --> 14:35.060
나중에 다른 모델도 똑같이 할 수 있어요
14:35.060 --> 14:36.680
모델 출력을 보세요
14:36.710 --> 14:42.320
모델을 보고 인쇄해서 어떻게 생겼는지 보고 라마3와 비교해요
14:43.160 --> 14:47.720
다음 비디오에선 쉬도록 하죠 다음 비디오에선 이걸 실행하고 다른 모델도
14:47.720 --> 14:49.040
실행할 거예요
14:49.070 --> 14:50.690
그러니 어디 가지 마세요
14:50.720 --> 14:51.770
이따 봐요