근접 정책 최적화(PPO)
근접 정책 최적화(PPO)는 여러 기계 학습 모델을 활용해 하나의 모델을 학습하고 점수를 매기는 과정입니다. 다음 모델은 PPO 프로세스의 일부입니다.
-
액터 훈련 또는 정책 모델: 지도 미세 조정(SFT) 방식의 모델로, 에포크마다 미세 조정 및 업데이트가 이루어집니다. 업데이트는 프롬프트를 샘플링하고, 결과물을 생성하며, 클리핑 대리 목표를 사용해 가중치를 업데이트하는 방식으로 수행됩니다. 이를 통해 토큰 단위의 로그 가능도 변화 폭이 제한되어 각 정책 단계가 이전 단계와 근접하게 유지되며 학습 안정성이 보장됩니다.
-
액터 생성 모델: 보상 모델과 비평가 모델의 평가를 받기 위해 프롬프트 완성 또는 응답을 생성하는 모델입니다. 이 모델의 가중치는 매 에포크마다 액터 학습 모델 또는 정책 모델에서 업데이트됩니다.
-
보상 모델: 가중치가 고정된 모델로, 액터 생성 모델을 평가하는 데 사용됩니다.
-
비평가 모델: 가중치가 고정되지 않은 모델로, 액터 생성 모델을 평가하는 데 사용됩니다. 이 점수는 일반적으로 액터가 나머지 토큰을 생성할 때 받을 총 보상에 대한 추정치로 간주됩니다.
-
앵커 모델: 가중치가 고정된 SFT 모델로, 액터 훈련 모델과 기본 모델 간의 KL 발산을 계산하는 데 사용됩니다. 앵커 모델은 액터 모델의 업데이트가 기본 모델과 비교해 지나치게 급격하지 않도록 보장합니다. 급격한 변화는 학습 불안정이나 성능 저하를 초래할 수 있습니다.
훈련 데이터는 JSONL 형식이어야 하며, 각 줄에 훈련 예시를 나타내는 단일 JSON 객체가 포함되어야 합니다. 예:
{ "turns": ["string", "string", ...], // Required "turns_to_mask": [integer, integer, ...], // Required "reward_category": "string", // Required "meta_data": {} // Optional }
-
turns는 대화 시퀀스를 나타내는 대화 문자열 배열의 배열입니다. 이 줄에는 시스템 프롬프트, 사용자 메시지 및 봇 응답이 포함되어 있습니다. 사용자 메시지는 일반적으로 "Bot: "로 끝나는데, 이는 모델 출력이 시작되는 위치를 나타냅니다. 예를 들어[["System prompt"], ["User: Question Bot:"], ["Bot response"]]입니다. -
turns_to_mask는 0 기반 인덱스의 배열로, 그라디언트 업데이트가 적용되어서는 안 되는 턴을 식별합니다. 마스킹된 턴은 일반적으로 시스템 프롬프트와 사용자 턴입니다. 예를 들어[0, 1, 3]은 시스템 프롬프트와 사용자 메시지(첫 번째 및 세 번째 메시지)를 마스킹합니다. -
reward_category는 평가할 모델 성능의 측면을 식별하는 문자열입니다. 이것은 훈련 중에 적절한 보상 모델 범주를 선택하는 데 사용됩니다.default,math,coding,if,rag및rai와 같은 보상 범주를 사용할 수 있습니다. -
meta_data는 추가 컨텍스트 또는 실측 정보가 포함된 선택적 객체입니다. 여기에는 식별자, 소스 정보 또는 대화 컨텍스트가 포함될 수 있습니다. 구조는 데이터세트 요구 사항에 따라 유연합니다.
다음은 예시 레코드입니다.
{ "turns": ["You are a helpful AI assistant.", "User: What is ML? Bot:", "Machine learning is...", "User: Examples? Bot:", "Email spam filtering is..." ], "turns_to_mask": [0, 1, 3], "reward_category": "default", "meta_data": { "messages": [{ "role": "system", "content": "You are a helpful AI assistant." }, { "role": "user", "content": "What is ML?" }, { "role": "assistant", "content": "Machine learning is..." }, { "role": "user", "content": "Examples?" }, { "role": "assistant", "content": "Email spam filtering is..." } ] } }
보상 모델링 프레임워크는 고유한 범주형 목표에 다차원 최적화를 구현하여 강력한 모델 수렴을 촉진합니다. 보상 범주는 모델을 최적화해야 하는 대상 태스크에 따라 선택해야 합니다.
태스크에 적합한 프레임워크를 선택하려면 다음 지침을 따르는 것이 좋습니다.
-
default: 표준 대화 태스크 및 기본 상호 작용을 위한 범용 옵티마이저입니다. 일반적인 대화 및 토론, 기본적인 글쓰기, 간단한 질문 답변 및 전문 지식이 필요하지 않은 정보 쿼리에 사용됩니다.예:
{ "turns": ["Write a summary of climate change"], "turns_to_mask": [0], "reward_category": "default" } -
math: 수학적 계산 및 수치 추론 태스크에 특화된 옵티마이저입니다. 수학 문제 해결, 산술 계산, 대수 방정식, 기하학 문제 및 통계 분석에 사용됩니다.예:
{ "turns": ["Calculate the derivative of x²"], "turns_to_mask": [0], "reward_category": "math" } -
coding: 프로그래밍 및 소프트웨어 개발 관련 쿼리 전용 범주입니다. 코드 구현, 디버깅 지원, 알고리즘 설계, 기술 문서 작성 및 시스템 아키텍처 질문에 사용됩니다.예:
{ "turns": ["Write a function to check if a string is palindrome"], "turns_to_mask": [0], "reward_category": "coding" } -
if: 정확한 절차 수행과 단계별 안내가 필요한 태스크를 위한 범주입니다. 다단계 절차, 순차적 지시, 복잡한 태스크 분해 및 프로세스 문서화에 사용됩니다.예:
{ "turns": ["Provide steps to deploy a web application"], "turns_to_mask": [0], "reward_category": "if" } -
rag: 검색된 컨텍스트 정보를 기반으로 쿼리에 응답해야 하는 태스크를 위한 보상 범주입니다. 제공된 참조 자료에서 직접 응답을 도출해야 하는 경우에 사용됩니다. 사실에 기반한 내용을 종합하되 검색된 정보의 범위를 벗어나지 않도록 하여 일반적인 지식이 아닌 제공된 컨텍스트에 근거한 답변이 생성되도록 보장합니다.예:
{ "turns": ["The Synthesis Report integrates findings from all six IPCC assessment cycles, revealing that global surface temperature has increased 1.1°C from 1850-1900 to 2011-2020, with human activities unequivocally identified as the cause of this warming. Alarmingly, current policies put the world on track for 3.2°C warming by 2100. The document identifies 5 key climate system "tipping points" approaching and emphasizes that greenhouse gas emissions must decline 43% by 2030 (compared to 2019 levels) to limit warming to 1.5°C. Climate-related risks will escalate with every increment of warming, with loss and damage disproportionately affecting vulnerable populations. Despite some progress, climate adaptation remains uneven with significant gaps, and financial flows continue to fall below levels needed for mitigation goals.", "What were the key findings of the latest IPCC climate report?"], "turns_to_mask": [0, 0], "reward_category": "rag" } -
rai: 공정성, 투명성, 윤리와 같은 책임 있는 AI 원칙을 적용해야 하는 태스크를 위한 보상 범주입니다. AI 시스템의 잠재적 편향을 평가하고, 프라이버시를 보호하며, 윤리적 딜레마를 해결하고, 포괄적인 설계 원칙을 장려하는 데 사용됩니다.예:
{ "turns": ["Identify potential bias concerns when developing a loan approval algorithm and suggest mitigation strategies"], "turns_to_mask": [0], "reward_category": "rai" }
턴 마스킹
훈련 데이터세트에서 turns_to_mask 파라미터는 훈련 중에 어떤 대화 턴이 그라디언트 업데이트를 받을지 제어하는 핵심 요소입니다. 이 인덱스 배열은 모델이 어떤 대화 부분을 학습 대상으로 삼을지 그리고 어떤 부분을 단순히 컨텍스트로 처리할지 결정합니다. 마스킹을 적절하게 사용하면 모델이 적절한 응답 패턴을 학습하는 동시에 성능을 저하시킬 수 있는 시스템 프롬프트 또는 사용자 입력에 대한 훈련을 피할 수 있습니다.
다음은 권장하는 마스킹 지침입니다.
-
항상 인덱스 0 마스킹 - 시스템 프롬프트에 그라디언트 업데이트가 적용되어서는 안 됩니다.
-
항상 사용자 턴 마스킹 - 모델이 사용자 입력을 생성하는 것을 학습하지 못하도록 합니다.
-
패턴 일관성 - 유사한 대화 구조에 동일한 마스킹 패턴을 사용합니다(예: 멀티턴 대화의 경우 (0, 1, 3, 5)).
-
선택적 훈련 - 초기 봇 응답을 마스킹하여 훈련을 개선된 최종 응답에 집중합니다.
-
생각의 사슬 보존 - 추론 시퀀스를 훈련할 때는 시스템 턴과 사용자 턴만 마스킹합니다.
-
품질 필터링 - 성능 저하를 방지하기 위해 품질이 낮은 어시스턴트 응답을 마스킹합니다.
-
컨텍스트 최적화 - 마스킹된 턴이 후속 응답에 필요한 필수 컨텍스트를 제거하지 않도록 합니다.
효과적인 마스킹의 핵심은 훈련 지표와 검증 성능을 모니터링하여 마스킹 전략이 원하는 모델 출력에 그라디언트 업데이트를 집중하면서 필요한 컨텍스트를 보존하는지 여부를 식별하는 것입니다.
KL 발산 손실 활성화
KL 발산 손실을 활성화하려면 현재 정책이 원래 분포로부터 얼마나 발산되었는지 계산하기 위해 앵커 서버를 활성화 해야 합니다. KL 손실 유형을 지정해야 하며 계수는 0이 아닌 값이어야 합니다. 계수 값을 크게 설정하면 모델이 원래 정책에서 크게 벗어나지 않아 결과적으로 일반적 성능의 변화가 더 적습니다. 계수 값을 작게 설정하면 이전 정책과 더 큰 편차가 발생하여 대상 지표의 성능은 향상되지만 일반적 성능에는 영향을 미칩니다.
ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 32 ppo_actor_train: model: ######## Use KL in actor loss ######## kl_loss_type: low_var_kl kl_loss_coeff: 0.1 ######## Use KL in reward model ###### kl_reward_penalty_coeff: 0.1
학습률
비평가 및 정책 모델의 학습률을 조정할 수 있으며, 기본값은 3e-6으로 적절한 균형을 제공합니다. 학습률이 너무 높으면 일반적으로 훈련 불안정이 발생하며, 이는 KL 발산 스파이크 및 불규칙한 정책 동작을 통해 식별할 수 있습니다. 반대로 학습률이 너무 낮으면 수렴 문제가 발생하거나 학습 속도가 느려질 수 있는데, 이는 보상 정체와 최소한의 정책 업데이트로 알 수 있습니다. KL 발산, 보상 점수 및 가치 손실을 정기적으로 모니터링하면 훈련 중에 학습률을 조정할지 여부를 결정하는 데 도움이 됩니다.
ppo_critic: model: optim: lr: 3e-6 ppo_actor_train: model: optim: lr: 3e-06
글로벌 배치 크기
글로벌 배치 크기는 Amazon Nova의 PPO 성능에 상당한 영향을 미치는데, 배치 크기가 클수록 일반적으로 훈련 안정성과 그라디언트 추정이 향상되고 병렬 처리 효율도 높아집니다. 그러나 너무 큰 배치 크기는 훈련 효율 감소로 이어질 수 있으며, 가용 메모리 제약으로 인해 학습률 및 기타 하이퍼파라미터와의 신중한 균형 조정이 필요합니다.
ppo_actor_train: model: global_batch_size: 160
PPO를 통해 조정할 수 있는 Amazon Nova 파라미터는 다음과 같습니다.
-
실행 구성
-
actor_train_replicas: 액터 훈련 모델에 사용할 컴퓨팅 인스턴스 수입니다. 사용 가능한 값은 선택한 모델에 따라 다릅니다. Amazon Nova Micro는 1개 또는 2개의 복제본을 지원합니다. Amazon Nova Lite는 1개, 2개 또는 4개의 복제본을 지원합니다. Amazon Nova Pro는 3개, 6개 또는 12개의 복제본을 지원합니다. -
rm_replicas: 보상 모델에 사용되는 컴퓨팅 인스턴스 수입니다. 모든 모델 크기에 1개의 복제본을 사용하는 것이 좋습니다. -
cm_replicas: 비평가 모델에 사용되는 컴퓨팅 인스턴스 수입니다. 모든 모델 크기에 1개의 복제본을 사용하는 것이 좋습니다. -
actor_generation_replicas: 액터 생성에 사용되는 컴퓨팅 인스턴스 수입니다. 사용 가능한 값은 선택한 모델에 따라 다릅니다. Amazon Nova Micro는 1개의 복제본을 지원합니다. Amazon Nova Lite는 1개 또는 2개의 복제본을 지원합니다. Amazon Nova Pro는 1개 또는 2개의 복제본을 지원합니다. -
am_replicas: 앵커 모델에 사용되는 컴퓨팅 인스턴스 수입니다. 모든 모델 크기에 1개의 복제본을 사용하는 것이 좋습니다.
-
-
액터 훈련 구성(정책 구성)
-
max_steps: 액터 훈련 모델을 미세 조정하거나 훈련하는 최대 단계 수입니다. 여기서 한 단계는 롤아웃을 수행한 후global_batch_size에 해당하는 액터 훈련 모델을 훈련하는 과정으로 정의됩니다. 하나의 에포크는global_batch_size * trajectory_buffer_scale로 정의됩니다.여기에서 선택한 값은 사용 사례 및 데이터세트 복잡성에 따라 달라집니다. 권장 시작점은 65개 에포크 또는 520개 단계로, 이 단계 값은 에포크 수에
trajectory_buffer_scale값을 곱해 계산된 것입니다. 그러나 일부 태스크는 동일한 성능을 달성하려면 더 긴 PPO 훈련 시간이 필요합니다.PPO의 경우 ml-flow 콘솔의 훈련 지표(예: 보상 모델 점수의 포화 및 평균 행동 길이)는 평가를 위한 최적의 지점을 식별하는 데 도움이 될 수 있습니다.
-
actor_model_max_length: 완료를 생성하기 위해 액터 생성 구성 요소로 전송되는 입력 데이터의 최대 길이입니다. -
reward_model_max_length: 완료를 평가하기 위해 보상 서버로 전송되는 입력 데이터의 최대 길이입니다. -
trajectory_buffer_scale:이 버퍼는 가중치를 업데이트하고 새 롤아웃을 생성하기 전에 이전 액터 훈련(정책) 모델을 사용하여 생성된 롤아웃 수를 나타냅니다. 지원되는 값은 1, 2, 4, 8 및 16입니다.trajectory_buffer_scale이 1이면 훈련은 온-폴리시 방식으로 수행됩니다. 즉, 롤아웃은 가장 업데이트된 모델 가중치로 생성되지만 처리량은 떨어집니다. 반면 값을 16으로 설정하면 모델은 다소 오프-폴리시 상태가 되지만 처리량은 더 높아집니다. 각 모델에 대해 8로 시작하는 것이 좋습니다. -
kl_reward_penalty_coeff: 업데이트가 너무 급격하게 이루어지지 않도록 하고 정책이 기본 또는 SFT 모델에서 벗어나지 않도록 보장하는 KL 발산 항입니다. -
kl_loss_coeff:이 값은 KL 발산 페널티가 PPO의 전체 훈련 목표에 미치는 영향을 제어합니다. -
kl_loss_type:이 값은 현재 정책 분포와 참조 정책 분포 간의 발산을 계산하는 방법을 지정합니다. 사용 가능한kl_loss_types은kl(표준 KL 발산),mse(평균 제곱 오차),abs(로그 확률 간 절대 차이) 및low_var_kl(저분산 KL 근사)입니다. -
model.clip_ratio: PPO의 액터 클립 비율(ε)은 각 업데이트 동안의 정책 변경 정도를 제한하는 하이퍼파라미터입니다. -
model.optim.lr: 액터 모델의 대리 모델 손실 훈련에 사용되는 학습률입니다. -
model.lam: 이점 추정 프로세스의 일부입니다. λ 값이 클수록 장기 보상에 더 많은 가중치가 부여되지만 분산이 커집니다. 반대로 λ 값이 작으면 즉각적인 보상에 더 집중하게 되고 분산은 작아지지만 편향이 커집니다. -
model.ent_coeff: PPO의 엔트로피 손실은 정책이 너무 결정론적으로 변할 때(즉, 항상 높은 신뢰도로 동일한 행동을 선택할 때) 정책에 페널티를 적용하여 탐색을 장려합니다.
-
-
보상 모델 구성
-
global_batch_size: 보상 모델을 사용하여 완료 점수를 매기기 위한 배치 크기입니다.ppo_actor_train.model.global_batch_size가ppo_reward.model.global_batch_size보다 크면 여러 배치로 나누어 처리됩니다. 단,ppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size는 0이어야 합니다. -
max_length: 보상 모델의 최대 컨텍스트 길이입니다. 이 값은ppo_actor_train.model.max_length와 동일해야 합니다.
-
-
비평가 모델 구성
-
global_batch_size: 비평가 모델 값의 배치 크기입니다. 비평가 모델은 액터 모델에서 제공하는 응답의 각 토큰에 대한 값 추정치를 제공합니다. 이 배치 크기는 추론과 훈련 모두에 사용됩니다.단,
ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size는 0이어야 하며 다음이 참이어야 합니다.ppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0. -
max_length: 비평가 모델의 최대 컨텍스트 길이입니다. 이 값은ppo_actor_train.model.max_length와 동일해야 합니다. -
model.optim.lr: 액터 모델의 대리 모델 손실 훈련에 사용되는 학습률입니다.
-
-
앵커 모델 구성
-
global_batch_size: 고정된 SFT 또는 앵커 모델의 logp를 생성하기 위한 배치 크기입니다. 단,ppo_actor_train.model.global_batch_size % ppo_anchor.model.global_batch_size는 0이어야 합니다. -
max_length: 보상 모델의 최대 컨텍스트 길이입니다. 이 값은ppo_actor_train.model.max_length와 동일해야 합니다.
-
-
액터 생성 모델 구성
-
actor_model_max_length: 액터 모델 생성 구성 요소의 최대 컨텍스트 길이입니다. 이 값은ppo_actor_train.model.max_length와 동일해야 합니다.
-
PPO 레시피
다음은 PPO의 레시피입니다.
## Run config run: name: ndry-ppo-pro model_type: amazon.nova-pro-v1:0:300k model_name_or_path: nova-pro/prod data_s3_path: s3://testing/train.jsonl # Your training data S3 path actor_train_replicas: 6 # Actor train model replicas rm_replicas: 1 # Reward model replicas cm_replicas: 1 # Critic model replicas actor_generation_replicas: 2 # Actor generation model replicas am_replicas: 1 # Anchor model replicas ## Training config for each PPO component ppo_reward: max_length: 8192 # model architecture max length trainer: num_nodes: ${recipes.run.rm_replicas} model: global_batch_size: 16 ppo_critic: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 16 optim: lr: 3e-6 name: distributed_fused_adam adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.am_replicas} model: global_batch_size: 16 ppo_actor_generation: actor_model_max_length: 8192 trainer: num_nodes: ${recipes.run.actor_generation_replicas} ppo_actor_train: max_length: 8192 max_steps: 520 # Stopping criteria Desired epoch num * trajectory_buffer_scale actor_model_max_length: 8192 # truncate input data to max length reward_model_max_length: 8192 # truncate input data to max length trajectory_buffer_scale: 8 trainer: num_nodes: ${recipes.run.actor_train_replicas} model: global_batch_size: 160 ent_coeff: 0 clip_ratio: 0.2 lam: 1 kl_loss_coeff: 0.0 kl_loss_type: low_var_kl kl_reward_penalty_coeff: 0.0 hidden_dropout: 0.0 # Dropout probability for hidden state transformer. attention_dropout: 0.0 # Dropout probability in the attention layer. ffn_dropout: 0.0 # Dropout probability in the feed-forward layer. optim: lr: 3e-06 name: distributed_fused_adam # only this one is available for p0. adam_w_mode: true eps: 1e-08 weight_decay: 0.0 betas: - 0.9 - 0.999
제한 사항
PPO에는 다음과 같은 제한 사항이 있습니다.
-
중간 체크포인트는 평가를 위해 저장되지 않으며 중간 체크포인트에서 재개할 수 없습니다. 마지막 체크포인트만 저장됩니다.
-
멀티모달 데이터세트는 지원되지 않습니다.
-
훈련 작업은 자동으로 중지되지 않습니다. HyperPod CLI를 사용하여 작업을 중지해야 합니다.
-
MLflow 로깅은 지원되지 않습니다.
-
TensorBoard에서는 비평가 훈련 지표가 지원되지 않습니다.
-
하이퍼파라미터를 조정하려면 하이퍼파라미터 선택의 지침을 따릅니다.