การสะสมเกรเดียนต์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Dennis Lee

Data Engineer, Amazon

การฝึกแบบกระจาย

 

 

ผังงานแสดงหัวข้อของหลักสูตร: การเตรียมข้อมูล การฝึกแบบกระจาย การฝึกอย่างมีประสิทธิภาพ และตัวปรับค่า

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การฝึกอย่างมีประสิทธิภาพ

 

 

ผังงานแสดงหัวข้อของหลักสูตร: การเตรียมข้อมูล การฝึกแบบกระจาย การฝึกอย่างมีประสิทธิภาพ และตัวปรับค่า

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การเพิ่มประสิทธิภาพการฝึก

 

 

ไอคอนแสดงถึงประสิทธิภาพด้านหน่วยความจำ การสื่อสาร และการคำนวณ

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การเพิ่มประสิทธิภาพการฝึก

 

 

ไอคอนแสดงถึงประสิทธิภาพด้านหน่วยความจำ การสื่อสาร และการคำนวณ

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การเพิ่มประสิทธิภาพการฝึก

 

 

ไอคอนแสดงถึงประสิทธิภาพด้านหน่วยความจำ การสื่อสาร และการคำนวณ

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ช่วยเพิ่มประสิทธิภาพหน่วยความจำ

 

 

ไอคอนแสดงถึงประสิทธิภาพด้านหน่วยความจำ การสื่อสาร และการคำนวณ

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

ปัญหาของขนาดแบตช์ขนาดใหญ่

  • ขนาดแบตช์ขนาดใหญ่: ประมาณค่าเกรเดียนต์ได้แม่นยำขึ้น เรียนรู้เร็วขึ้น
  • หน่วยความจำ GPU จำกัดขนาดแบตช์

 

 

แผนภาพแสดงว่าขนาดแบตช์ขนาดใหญ่อาจทำให้เกิดข้อผิดพลาดหน่วยความจำเต็ม ในขณะที่ขนาดแบตช์ขนาดเล็กช่วยให้การฝึกสำเร็จได้

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ทำงานอย่างไร

แผนภาพแสดงการแบ่งแบตช์ขนาดใหญ่เป็นแบตช์ขนาดเล็ก

  • การสะสมเกรเดียนต์: รวมเกรเดียนต์จากแบตช์ขนาดเล็ก
  • ฝึกโมเดลเสมือนใช้แบตช์ขนาดใหญ่
  • อัปเดตพารามิเตอร์หลังรวมเกรเดียนต์

แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

PyTorch, Accelerator และ Trainer

แผนภูมิเปรียบเทียบความง่ายในการใช้งานและความสามารถในการปรับแต่งของ PyTorch, Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

PyTorch, Accelerator และ Trainer

แผนภูมิเปรียบเทียบความง่ายในการใช้งานและความสามารถในการปรับแต่งของ PyTorch, Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

PyTorch, Accelerator และ Trainer

แผนภูมิเปรียบเทียบความง่ายในการใช้งานและความสามารถในการปรับแต่งของ PyTorch, Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))









แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss







แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps







แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps
    loss.backward()







แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps
    loss.backward()
    if ((index + 1) 
        % gradient_accumulation_steps == 0):





แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย PyTorch

for index, batch in enumerate(dataloader):
    inputs, targets = (batch["input_ids"], 
                       batch["labels"])
    inputs, targets = (inputs.to(device), 
                       targets.to(device))
    outputs = model(inputs, labels=targets)
    loss = outputs.loss
    loss = loss / gradient_accumulation_steps
    loss.backward()
    if ((index + 1) 
        % gradient_accumulation_steps == 0):
        optimizer.step()
        lr_scheduler.step()
        optimizer.zero_grad()

แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

จาก PyTorch สู่ Accelerator

แผนภูมิเปรียบเทียบความง่ายในการใช้งานและความสามารถในการปรับแต่งของ PyTorch, Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

จาก PyTorch สู่ Accelerator

แผนภูมิเปรียบเทียบความง่ายในการใช้งานและความสามารถในการปรับแต่งของ PyTorch, Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader): inputs, targets = (batch["input_ids"], batch["labels"])

แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):

        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss





แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss




แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss
        accelerator.backward(loss)



แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss
        accelerator.backward(loss)



แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย Accelerator

accelerator = \
    Accelerator(gradient_accumulation_steps=2)

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        inputs, targets = (batch["input_ids"],
                           batch["labels"])
        outputs = model(inputs, 
                        labels=targets)
        loss = outputs.loss
        accelerator.backward(loss)
        optimizer.step()
        lr_scheduler.step()
        optimizer.zero_grad()

แผนภาพแสดงการสะสมเกรเดียนต์จากหลายแบตช์

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

จาก Accelerator สู่ Trainer

แผนภูมิเปรียบเทียบความง่ายในการใช้งานและความสามารถในการปรับแต่งของ PyTorch, Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

จาก Accelerator สู่ Trainer

แผนภูมิเปรียบเทียบความง่ายในการใช้งานและความสามารถในการปรับแต่งของ PyTorch, Accelerator และ Trainer

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

การสะสมเกรเดียนต์ด้วย Trainer

training_args = TrainingArguments(output_dir="./results",
                                  evaluation_strategy="epoch",
                                  gradient_accumulation_steps=2)

trainer = Trainer(model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["validation"], compute_metrics=compute_metrics)
trainer.train()
{'epoch': 1.0, 'eval_loss': 0.73, 'eval_accuracy': 0.03, 'eval_f1': 0.05}
{'epoch': 2.0, 'eval_loss': 0.68, 'eval_accuracy': 0.19, 'eval_f1': 0.25}
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

มาฝึกกันเลย!

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Preparing Video For Download...