• การแนะนำ
• การติดตั้ง
• เลเยอร์
• ฟังก์ชั่นคณิตศาสตร์
• Pytorch Fallback
• การทดสอบ
Attorch เป็นชุดย่อยของโมดูล nn ของ Pytorch เขียนล้วนๆใน Python โดยใช้ Triton ของ Openai เป้าหมายของมันคือการรวบรวมโมดูลเครือข่ายประสาทที่อ่านได้ง่ายและสามารถอ่านได้ในขณะที่ยังคงรักษาหรือปรับปรุงประสิทธิภาพของ Pytorch กล่าวอีกนัยหนึ่งมันตั้งใจที่จะเป็นโครงการที่สามารถแยกได้ด้วยการออกแบบที่เรียบง่ายและใช้งานง่ายซึ่งสามารถใช้เป็นจุดเริ่มต้นที่เข้าถึงได้สำหรับผู้ที่กำลังมองหาที่จะพัฒนาการดำเนินการเรียนรู้ลึก ๆ ที่กำหนดเอง แต่ไม่พอใจกับความเร็วของการใช้ pytorch บริสุทธิ์และไม่มีความเชี่ยวชาญด้านเทคนิคหรือทรัพยากรในการเขียน Cuda Kernels
มีเฟรมเวิร์กคล้าย pytorch ที่ยอดเยี่ยมจำนวนมากที่ขับเคลื่อนโดย Triton รวมถึง Kernl, xformers, underloth และ fla แต่ส่วนใหญ่มุ่งเน้นไปที่การใช้งานของ Transformers และ NLP ในขณะที่ Attorch มีจุดมุ่งหมายมากขึ้น ยิ่งไปกว่านั้น Attorch ไม่ใช่แพ็คเกจการอนุมานอย่างเดียวและรองรับการส่งผ่านทั้งไปข้างหน้าและข้างหลังอย่างเต็มที่ซึ่งหมายความว่าสามารถใช้ในระหว่างการฝึกอบรมเช่นเดียวกับการอนุมานแม้ว่าประสิทธิภาพการทำงานของหลังจะไม่ได้อยู่ในระดับที่เทียบเท่ากับเครื่องยนต์การอนุมานเฉพาะ
การพึ่งพาเฉพาะของ Attorch คือ torch==2.4.0 และ triton==3.0.0 โปรดติดตั้งเวอร์ชันที่ระบุของห้องสมุดทั้งสองนี้และโคลนที่เก็บนี้เพื่อเริ่มต้นใช้งาน
เลเยอร์ที่ใช้งานอยู่ในปัจจุบันด้วยการสนับสนุนแบบผสมอัตโนมัติ (AMP) คือคือ
attorch.Conv1d : 1D-convolves ผ่านอินพุตโดยใช้น้ำหนักโดยเลือกเพิ่มอคติattorch.Conv2d : 2D-convolves ผ่านอินพุตโดยใช้น้ำหนักโดยเลือกเพิ่มอคติattorch.MultiheadAttention : ใช้ความสนใจของผลิตภัณฑ์หลายหัวแบบหลายหัวกับอินพุตattorch.Hardsigmoid : ใช้ sigmoid แข็งกับอินพุตโดยเลือกหลอมละลายattorch.Hardswish : ใช้อย่างหนักกับอินพุตเป็นทางเลือกหลอมละลายattorch.LeakyReLU : ใช้ RELU ที่รั่วไหลกับอินพุตโดยเลือกหลอมละลายattorch.GELU : ใช้ gelu กับอินพุตเลือกหลอมละลายattorch.ReLU : ใช้ relu กับอินพุตเลือกหลอมละลายattorch.ReLU6 : ใช้ relu6 กับอินพุต, เลือกหลอมละลายattorch.SELU : ใช้ selu กับอินพุตเลือกหลอมละลายattorch.SiLU : ใช้ SILU กับอินพุตโดยเลือกหลอมละลายattorch.Mish : นำไปใช้กับอินพุตโดยเลือกหลอมละลายattorch.Sigmoid : ใช้ sigmoid กับอินพุตโดยเลือกหลอมละลายattorch.Tanh : ใช้ tanh กับอินพุต, เลือกหลอมละลายattorch.GLU : ใช้หน่วยเชิงเส้นที่มีรั้วรอบขอบชิดกับฟังก์ชั่นการเปิดใช้งานโดยพลการกับอินพุตattorch.LogSoftmax : ปกติอินพุตโดยใช้ SoftMax และใช้บันทึกattorch.Softmax : ปกติอินพุตโดยใช้ SoftMaxattorch.Softmin : ปกติอินพุตโดยใช้ softminattorch.BatchNorm1d : batch-normalizes อินพุต 2D หรือ 3D, เลือกหลอมรวมฟังก์ชั่นการเปิดใช้งานและเพิ่มส่วนที่เหลือลงในผลการเปิดใช้งานล่วงหน้าattorch.BatchNorm2d : batch-normalizes อินพุต 4D เป็นทางเลือกหลอมรวมฟังก์ชั่นการเปิดใช้งานและเพิ่มส่วนที่เหลือลงในผลการเปิดใช้งานล่วงหน้าattorch.LayerNorm : เลเยอร์กำหนดอินพุตattorch.RMSNorm : รูท-หมายถึง-สแควร์-กำหนดอินพุตattorch.Linear : การแปลงอินพุตเป็นเส้นตรงโดยใช้น้ำหนักเลือกเพิ่มอคติและหลอมรวมฟังก์ชั่นการเปิดใช้งานattorch.Dropout : องค์ประกอบศูนย์แบบสุ่มในอินพุตระหว่างการฝึกอบรมattorch.L1Loss : วัดข้อผิดพลาดสัมบูรณ์เฉลี่ยระหว่างอินพุตและเป้าหมายattorch.MSELoss : วัดข้อผิดพลาดค่าเฉลี่ยกำลังสองระหว่างอินพุตและเป้าหมายattorch.CrossEntropyLoss : วัดค่าเฉลี่ยการสูญเสียเอนโทรปีข้ามระหว่างอินพุตและเป้าหมายด้วยการชั่งน้ำหนักอีกครั้งของแต่ละชั้นเรียนattorch.NLLLoss : วัดการสูญเสียความน่าจะเป็นของบันทึกเชิงลบระหว่างอินพุตและเป้าหมายด้วยการชั่งน้ำหนักอีกครั้งของแต่ละคลาสเลเยอร์ดังกล่าวจะทำตัวเหมือนกันกับ pytorch เทียบเท่า
เคอร์เนล Triton มักจะประกอบด้วยสองส่วน: หนึ่งจัดการการโหลดและการจัดเก็บของเทนเซอร์ที่เกี่ยวข้องอื่น ๆ แปลงข้อมูลโดยใช้ฟังก์ชั่นทางคณิตศาสตร์ที่เหมาะสม ตัวอย่างเช่นเคอร์เนลการทำให้เป็นมาตรฐานของเลเยอร์อ่านหนึ่งหรือหลายแถวจากอินพุต (โหลด) กำหนดมาตรฐาน (คณิตศาสตร์) และเขียนผลลัพธ์ลงในคอนเทนเนอร์ (เก็บ) การเลือกฟังก์ชั่นคณิตศาสตร์บริสุทธิ์เหล่านี้จัดทำโดย attorch.math วัตถุประสงค์คือการอำนวยความสะดวกในการดำเนินการตามที่กำหนดเองและการดำเนินการฟิวชั่น แม้ว่าจะมีเพียงการส่งต่อของฟังก์ชั่นดังกล่าวเท่านั้นที่มีอยู่ใน attorch.math ขอบคุณความบริสุทธิ์และการขาดการกระทำ I/O ของพวกเขาการไล่ระดับสีของพวกเขาสามารถได้รับโดยอัตโนมัติผ่านห้องสมุด triton-autodiff ส่วนสำคัญของเมล็ดของ Attorch สามารถ refactored โดยแทนที่บิตคณิตศาสตร์ของพวกเขาด้วย attorch.math ที่สอดคล้องกันการเปลี่ยนแปลงหรืออนุพันธ์ของพวกเขา แต่ attorch.math ทำเช่นนั้นจะเสียสละไฟล์เดียวและการออกแบบที่มีอยู่ในตัวเอง
เพื่อให้สามารถรวมเลเยอร์ Attorch และ Pytorch ได้ง่ายขึ้น attorch.nn ได้รับการเสนอซึ่งให้อินเทอร์เฟซกับโมดูลของ Attorch ที่มี Pytorch Fallback หากเลเยอร์ที่ต้องการไม่สามารถใช้ได้ตามที่เห็นด้านล่าง
from attorch import nn
lin = nn . Linear ( 10 , 20 ) # Uses attorch's linear layer
gap = nn . AdaptiveAvgPool2d ( 1 ) # Uses PyTorch's global pooling since GAP is not available in attorch แต่ละโมดูลสามารถทดสอบกับ pytorch คู่เพื่อให้แน่ใจว่าถูกต้อง การทดสอบเหล่านี้รวมอยู่ใน tests/ และสามารถดำเนินการได้โดยใช้ pytest ควรสังเกตว่าบางคนอาจล้มเหลวเนื่องจากปัญหาความแม่นยำเชิงตัวเลข แต่ในกรณีที่ใช้งานได้จริงส่วนใหญ่ไม่ควรเป็นปัญหา