>  기사  >  기술 주변기기  >  GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

WBOY
WBOY앞으로
2023-06-01 21:04:041721검색

모델 소개

Alpaca 모델은 스탠포드 대학교에서 개발한 LLM(Large Language Model, 대형 언어) 오픈 소스 모델입니다. LLaMA 7B(Meta 사의 오픈 소스 7B) 모델을 미세 조정한 70억 모델입니다. 52K 지침. 매개변수(모델 매개변수가 클수록 모델의 추론 능력이 강해지며, 물론 모델 교육 비용도 높아집니다)

LoRA의 정식 영어 이름은 Low-Rank Adaptation of Large Language Models이며, 말 그대로 Low-level Adaptation of Large Language Models로 번역됩니다. 이는 대규모 언어 모델의 미세 조정 문제를 해결하기 위해 Microsoft 연구진이 개발한 기술입니다. 사전 훈련된 대형 언어 모델이 특정 분야의 작업을 수행할 수 있도록 하려면 일반적으로 미세 조정을 수행해야 합니다. 그러나 현재 추론에 능숙한 대형 언어 모델의 매개 변수 크기는 매우 매우 큽니다. , 일부는 심지어 수천억 차원에 달합니다. 대규모 언어 모델에서 직접 미세 조정을 수행하려면 매우 많은 양의 계산과 매우 높은 비용이 필요합니다.

'LoRA의 방법은 사전 학습된 모델 매개변수를 동결한 다음 각 Transformer 블록에 학습 가능한 레이어를 주입하는 것입니다. 모델 매개변수의 기울기를 다시 계산할 필요가 없으므로 계산량이 크게 줄어듭니다.

아래 그림과 같이 원래의 사전 학습된 모델에 우회를 추가하고 차원 축소를 수행한 후 차원 연산을 수행하는 것이 핵심 아이디어입니다. 학습 중에는 사전 학습된 모델의 매개변수가 고정되어 있으며 차원 축소 행렬 A와 차원 향상 행렬 B만 학습됩니다. 모델의 입력 및 출력 차원은 변경되지 않고 그대로 유지되며 사전 훈련된 언어 모델의 BA 및 매개변수가 출력에 중첩됩니다.

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

A를 임의의 가우스 분포로 초기화하고 B를 0 행렬로 초기화합니다. 이렇게 하면 훈련 중에 새로운 우회 BA=0이 보장되어 모델 결과에 영향을 주지 않습니다. 추론하는 동안 왼쪽 부분과 오른쪽 부분의 결과가 함께 추가됩니다. 즉, h=Wx+BAx=(W+BA)x이므로 훈련 후 행렬 곱 BA를 추가하고 원래 가중치 행렬 W를 새 값으로 추가하면 됩니다. 가중치는 원래 사전 훈련된 언어 모델의 W로 대체될 수 있으며 추가 컴퓨팅 리소스는 추가되지 않습니다. LoRA의 가장 큰 장점은 더 빠르게 학습하고 더 적은 메모리를 사용한다는 것입니다.

이 글에서 현지화된 배포 실습에 사용된 Alpaca-lora 모델은 Alpaca 모델의 하위 적응 버전입니다. 이 문서에서는 Alpaca-lora 모델의 현지화 배포, 미세 조정 및 추론 프로세스를 연습하고 관련 단계를 설명합니다.


GPU 서버 환경 배포

이 기사에 배포된 GPU 서버에는 4개의 독립적인 GPU가 있습니다. 모델은 P40입니다. 단일 P40의 컴퓨팅 성능은 동일한 기본 주파수에서 60개의 CPU와 동일합니다.

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

테스트용으로만 물리적 카드가 너무 비싸다고 생각된다면 GPU 클라우드 서버인 "교체 버전"을 사용할 수도 있습니다. 물리적 카드와 비교하여 GPU 클라우드 서버를 사용하여 구축하면 유연한 고성능 컴퓨팅이 보장될 뿐만 아니라 다음과 같은 이점도 있습니다.

  • 높은 비용 성능: 시간 단위로 청구되며 시간당 12위안밖에 되지 않으며 배포 가능 유연한 리소스 관리, 확장성 및 탄력적인 확장과 같은 클라우드 컴퓨팅의 장점은 비즈니스 또는 개인 교육 요구 사항에 따라 컴퓨팅 리소스를 신속하게 조정하여 모델 교육 및 배포 요구 사항을 충족할 수 있습니다. 리소스 공유 및 협업이 쉬워 AI 모델 연구 및 적용을 위한 폭넓은 협력 기회 제공
  • 풍부한 API 및 SDK: 클라우드 컴퓨팅 공급업체는 풍부한 API 및 SDK를 제공하여 사용자가 쉽게 액세스할 수 있도록 합니다. cloud 플랫폼의 다양한 서비스와 기능을 맞춤형으로 개발하고 통합합니다.
  • JD Cloud의 GPU 클라우드 호스트는 현재 618 이벤트를 진행하고 있는데, 이는 매우 비용 효율적입니다

https://www.php.cn/link/5d3145e1226fd39ee3b3039bfa90c95d

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습GPU 서버를 구한 후 가장 먼저 우리가 해야 할 일은 그래픽 카드 드라이버와 CUDA 드라이버(그래픽 카드 제조업체인 NVIDIA가 출시한 컴퓨팅 플랫폼입니다. CUDA는 NVIDIA가 출시한 일반적인 병렬 컴퓨팅 아키텍처로, GPU가 복잡한 컴퓨팅 문제를 해결할 수 있게 해줍니다)를 설치하는 것입니다.

그래픽 카드 드라이버는 NVIDIA의 공식 웹사이트로 이동하여 해당 그래픽 카드 모델과 적합한 CUDA 버전을 찾아야 합니다. 다운로드 주소:

https://www.nvidia.com/Download/index.aspx 및 해당 그래픽을 선택하세요. 카드 및 CUDA 버전의 드라이버 파일을 다운로드할 수 있습니다.


GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

내가 다운로드한 파일은

NVIDIA-Linux-x86_64-515.105.01.run, 이 파일은 루트 권한으로 실행할 수 있습니다. 드라이버 설치 과정에서는 nvidia 프로세스를 실행할 수 없습니다. 필요한 경우 모두 종료하세요. , 아래 그림과 같이 설치가 실패합니다.

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

그런 다음 오류가 보고되지 않으면 설치가 성공합니다. 나중에 그래픽 카드 리소스를 확인하려면 nvitop과 같은 다른 그래픽 카드 모니터링 도구를 설치하는 것이 가장 좋습니다. 여기서는 서버마다 Python 버전이 다르기 때문에 anaconda를 설치하는 것이 가장 좋습니다. 실행 시 발생하는 다양한 이상한 오류를 방지하기 위해 자신만의 개인 Python 공간을 배포합니다. 구체적인 단계는 다음과 같습니다.

1. 다운로드 방법: wget
https://repo.anaconda.com/archive/Anaconda3-5.3 .0-리눅스-x86_64.sh. 설치 명령: sh Anaconda3-5.3.0-Linux-x86_64.sh 각 설치 단계에 "yes"를 입력하고 conda init 후 마지막으로 설치를 완료하면 설치 사용자 세션에 들어갈 때마다 직접 입력하게 됩니다. 파이썬 환경. 설치 마지막 단계에서 no를 선택하면, 즉 conda init가 수행되지 않으면 나중에 소스 /home/jd_ad_sfxn/anaconda3/bin/activate를 통해 프라이빗 Python 환경으로 들어갈 수 있습니다.

2. setuptools 설치 다음으로 패키징 및 배포 도구 setuptools를 설치해야 합니다. 다운로드 주소: wget
https://files.pythonhosted.org/packages/26/e5/9897eee1100b166a61f91b68528cb692e8887300d9cbdaa1a349f6304b79/setuptool s-40 .5.0.zip 설치 명령: unzip setuptools-40.5.0.zip cd setuptools-40.5.0/ python setup.py install

3. pip 설치 다운로드 주소: wget
https://files.pythonhosted.org/packages/45/ae/8a0ad77defb7cc903f09e551d88b443304a9bd6e6f124e75c0 fbbf 6de8f7/pip- 18.1.tar.gz 설치 명령: tar -xzf pip-18.1.tar.gz cd pip-18.1 python setup.py install

이 시점에서 기나긴 설치 과정이 드디어 끝났습니다. 프라이빗 파이썬 공간을 생성하고

conda create -n alpaca pythnotallow=3.9conda activate alpaca

를 실행한 후 확인하면 아래 그림과 같이 성공적으로 생성되었음을 의미합니다.

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

모델 훈련

위에서 GPU 서버의 기본 환경이 설치되었습니다. 이제 흥미로운 모델 훈련(exciting)을 시작하겠습니다. 먼저 모델 파일을 다운로드해야 합니다. 다운로드 주소:
https //github.com/tloen/alpaca-lora, 전체 모델이 오픈 소스이므로 훌륭합니다! 먼저 모델 파일을 로컬로 다운로드하고 git clone https://github.com/tloen/alpaca-lora.git을 실행합니다.

로컬에 alpaca-lora 폴더가 있을 것이고, 폴더 내에서 실행하기 위해 cd alpaca-lora가 있을 것입니다.

pip install -r requirements.txt

이 프로세스는 속도가 느릴 수 있으며 인터넷에서 많은 수의 종속 패키지를 다운로드해야 할 수도 있습니다. 다양한 패키지 충돌이 발생할 수도 있습니다. 프로세스 중에 보고되면 종속성에 문제가 없으므로 무엇이 누락되었는지 찾으려고 노력할 수밖에 없습니다(패키지 종속성과 버전 충돌을 해결하는 것은 실제로 골치 아픈 일이지만 이 단계를 잘 수행하지 않으면 모델이 작동하지 않습니다). 인내심을 갖고 조금씩 해결하세요.) 여기서는 고통스러운 과정에 대해 자세히 설명하지 않겠습니다. 왜냐하면 기계마다 다른 문제가 발생할 수 있고 참조 중요성이 그리 크지 않기 때문입니다.

설치 프로세스가 완료되고 더 이상 오류 메시지와 성공 완료 메시지가 표시되지 않으면 축하합니다. 이제 긴 행진의 절반을 완료한 것입니다. 조금 더 지속하면 성공할 가능성이 매우 높습니다. 성공하기 위해. 라:).

모델을 미세 조정하는 것이 목표이므로 미세 조정 목표가 있어야 합니다. 원래 모델은 중국어를 잘 지원하지 않기 때문에 중국어 코퍼스를 사용하여 모델을 더 좋게 만드는 것이 목표입니다. . 이 커뮤니티에서는 중국어 코퍼스를 직접 다운로드하고 로컬에서 wget을 실행할 수도 있습니다. =true, 나중에 모델 훈련에 사용되는 말뭉치를 alpaca-lora의 루트 디렉터리에 다운로드합니다(나중에 사용하기 편리하도록).

코퍼스의 내용은 삼중(아래 그림과 같이 지시, 입력, 출력)으로 구성되어 있습니다. Instruction은 모델에게 무언가를 하라고 지시하는 것이며, 입력은 입력, 출력은 출력입니다. 모델 지시와 입력, 훈련에 따라 모델이 중국어에 더 잘 적응할 수 있도록 모델은 어떤 정보를 출력해야 합니까?

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

好的,到现在为止,万里长征已经走完2/3了,别着急训练模型,我们现在验证一下GPU环境和CUDA版本信息,还记得之前我们安装的nvitop嘛,现在就用上了,在本地直接执行nvitop,我们就可以看到GPU环境和CUDA版本信息了,如下图:

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습


在这里我们能够看到有几块显卡,驱动版本和CUDA版本等信息,当然最重要的我们还能看到GPU资源的实时使用情况。

怎么还没到模型训练呢,别着急呀,这就来啦。

我们先到根目录下然后执行训练模型命令:

如果是单个GPU,那么执行命令即可:

python finetune.py \--base_model 'decapoda-research/llama-7b-hf' \--data_path 'trans_chinese_alpaca_data.json' \--output_dir './lora-alpaca-zh'

如果是多个GPU,则执行:

WORLD_SIZE=2 CUDA_VISIBLE_DEVICES=0,1 torchrun \--nproc_per_node=2 \--master_port=1234 \finetune.py \--base_model 'decapoda-research/llama-7b-hf' \--data_path 'trans_chinese_alpaca_data.json' \--output_dir './lora-alpaca-zh'

如果可以看到进度条在走,说明模型已经启动成功啦。

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

在模型训练过程中,每迭代一定数量的数据就会打印相关的信息,会输出损失率,学习率和代信息,如上图所示,当loss波动较小时,模型就会收敛,最终训练完成。

我用的是2块GPU显卡进行训练,总共训练了1904分钟,也就是31.73个小时,模型就收敛了,模型训练是个漫长的过程,所以在训练的时候我们可以适当的放松一下,做点其他的事情:)。

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

模型推理

模型训练好后,我们就可以测试一下模型的训练效果了,由于我们是多个GPU显卡,所以想把模型参数加载到多个GPU上,这样会使模型推理的更快,需要修改

generate.py 文件,添加下面这样即可。

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

然后我们把服务启起来,看看效果,根目录执行:

python generate.py --base_model "decapoda-research/llama-7b-hf" \--lora_weights './lora-alpaca-zh' \--load_8bit

其中./lora-alpaca-zh目录下的文件,就是我们刚刚fine tuning模型训练的参数所在位置,启动服务的时候把它加载到内存(这个内存指的是GPU内存)里面。

如果成功,那么最终会输出相应的IP和Port信息,如下图所示:

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

我们可以用浏览器访问一下看看,如果能看到页面,就说明服务已经启动成功啦。

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

激动ing,费了九牛二虎之力,终于成功啦!!

因为我们目标是让模型说中文,所以我们测试一下对中文的理解,看看效果怎么样?

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습


简单的问题,还是能给出答案的,但是针对稍微复杂一点的问题,虽然能够理解中文,但是并没有用中文进行回答,训练后的模型还是不太稳定啊。

在推理的时候我们也可以监控一下GPU的变化,可以看到GPU负载是比较高的,说明GPU在进行大量的计算来完成推理。

GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습

总结

1.效果问题:由于语料库不够丰富,所以目前用社区提供的语料库训练的效果并不是很好,对中文的理解力有限,如果想训练出能够执行特定领域的任务,则需要大量的语料支持,同时训练时间也会更长;

2. 추론 시간 문제: 현재 배포된 GPU 서버는 4개의 GPU를 가지고 있기 때문에 3개의 GPU를 기반으로 하여 실제 상호 작용을 실행하는 데 약 30초~1분 정도가 소요됩니다. -chatGPT와 같은 시간 반환을 지원하려면 많은 컴퓨팅 파워가 필요합니다. chatGPT의 백엔드에는 대규모 컴퓨팅 파워 클러스터가 지원되어야 한다는 것을 유추할 수 있으므로 서비스로 만들려면 비용 투자가 문제입니다.

3. 중국어로 된 코드 문제: 중국어를 입력하면 반환된 결과가 깨져 나오는 경우가 있습니다. 중국어 인코딩 문제로 인해 중국어가 공백으로 구분되지 않는 경우가 있습니다. 영어와 마찬가지로 어느 정도 왜곡된 코드가 있을 수 있습니다. AI API에도 이러한 상황이 있을 수 있습니다. 나중에 커뮤니티에서 해당 솔루션을 확인할 수 있습니다.

4. 현재 GPT 커뮤니티에서는 상대적으로 활발하고, 모델의 생성과 변경도 하루가 다르게 변하고 있습니다. 시간이 촉박하기 때문에 현재는 알파카로라 모델의 현지화 배포를 통해 더 좋고 저렴한 구현 솔루션이 있어야 합니다. 향후 실제 애플리케이션을 위해서는 커뮤니티의 발전을 계속해서 따르고 적절한 오픈 소스 솔루션을 선택하는 것이 필요합니다.

JD Cloud P40 모델 GPU의 [ChatGLM 언어 모델] 실습에 대한 자세한 내용은 다음을 참조하세요. https://www.php.cn/link/f044bd02e4fe1aa3315ace7645f8597a

저자: JD Retail Luo Yongjian

콘텐츠 출처: JD Cloud Developer 커뮤니티

위 내용은 GPT 대형 언어 모델 Alpaca-lora 현지화 배포 실습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 51cto.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제