CoreNet: ไลบรารีสำหรับการฝึกโครงข่ายประสาทเทียมเชิงลึก
(github.com/apple)- CoreNet เป็นทูลคิตที่ช่วยให้นักวิจัยและวิศวกรสามารถฝึกโมเดลโครงข่ายประสาทเทียมสำหรับงานที่หลากหลายได้ ตั้งแต่ foundation model อย่าง CLIP และ LLM ไปจนถึงการจัดประเภทวัตถุ การตรวจจับวัตถุ และ semantic segmentation
- ในเดือนตุลาคม 2024 CoreNet 0.1.1 ได้เพิ่มโปรเจ็กต์ใหม่ KV Prediction และงานวิจัยที่เกี่ยวข้องมีเป้าหมายเพื่อปรับปรุง Time to First Token
- งานวิจัยหลายชิ้นของ Apple ใช้ CoreNet และในโฟลเดอร์
projects/มีทั้งสูตรการฝึก/ประเมินผลและลิงก์ไปยังโมเดลที่พรีเทรนไว้แล้ว - โมเดลและชุดข้อมูลถูกจัดเป็นไดเรกทอรีตามประเภทงาน และคลาสของโมเดลจะเชื่อมกับการฝึก/ประเมินผลผ่านดีคอเรเตอร์
@MODEL_REGISTRY.registerและค่าการตั้งค่า YAMLmodels.<task_name>.name - CoreNet พัฒนาต่อมาจาก CVNets เพื่อรองรับการใช้งานที่กว้างกว่าวิสัยทัศน์คอมพิวเตอร์ และขยายขอบเขตไปถึงการฝึก foundation model รวมถึง LLM
วัตถุประสงค์และขอบเขตของ CoreNet
- CoreNet เป็นทูลคิตโครงข่ายประสาทเทียมเชิงลึกสำหรับฝึกทั้งโมเดลมาตรฐานและโมเดลใหม่ทั้งขนาดเล็กและขนาดใหญ่
- ขอบเขตของงานที่รองรับประกอบด้วย
- Foundation model: CLIP, LLM
- การจัดประเภทวัตถุ
- การตรวจจับวัตถุ
- semantic segmentation
อัปเดตเดือนตุลาคม 2024
- CoreNet 0.1.1 รวมโปรเจ็กต์ KV Prediction
- รายการงานวิจัยของ Apple ที่เกี่ยวข้องมี KV Prediction for Improved Time to First Token
งานวิจัยของ Apple และสูตรโปรเจ็กต์
- งานวิจัยสาธารณะหลายชิ้นของ Apple ใช้ CoreNet
- โฟลเดอร์
projects/มีทั้งสูตรการฝึก/ประเมินผลและลิงก์ไปยังโมเดลที่พรีเทรนไว้แล้ว - รายการงานวิจัยที่อยู่ใน README มีดังนี้
- KV Prediction for Improved Time to First Token
- OpenELM: An Efficient Language Model Family with Open Training and Inference Framework
- CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
- FastVit: A Fast Hybrid Vision Transformer using Structural Reparameterization
- Bytes Are All You Need: Transformers Operating Directly on File Bytes
- MobileOne: An Improved One millisecond Mobile Backbone
- MobileViT, MobileViTv2, CVNets เป็นต้น
การติดตั้งและเงื่อนไขการใช้งาน
- สำหรับการทดสอบ การรัน Jupyter notebook และการมีส่วนร่วม จำเป็นต้องติดตั้งและเปิดใช้งาน Git LFS
- บน Linux แนะนำให้ใช้ Python 3.10+ และ PyTorch v2.1.0 ขึ้นไป
- บน macOS ระบุว่าสามารถใช้ Python 3.9+ ของระบบได้เพียงพอ
- ดีเพนเดนซีเสริมสำหรับการประมวลผลเสียงและวิดีโอมีดังนี้
- Linux:
libsox-dev,ffmpeg - macOS:
sox,ffmpeg
- Linux:
- ระบบไฟล์ของ macOS ไม่แยกตัวพิมพ์เล็กพิมพ์ใหญ่ จึงอาจทำให้เกิดปัญหากับ Git ได้ ดังนั้นควรเข้าถึงรีโพซิทอรีด้วยพาธที่ใช้ตัวพิมพ์เล็กพิมพ์ใหญ่ตรงกับที่เห็นใน
ls
โครงสร้างรีโพซิทอรีและลำดับการใช้งาน
tutorials/มีตัวอย่างสำหรับเริ่มต้นใช้งาน CoreNet- ฝึกโมเดลใหม่บนชุดข้อมูลใหม่
- คู่มือการฝึกด้วย Slurm และหลายโหนด
- โน้ตบุ๊กสำหรับ CLIP, semantic segmentation, การตรวจจับวัตถุ
projects/ให้ สูตรการฝึกที่ทำซ้ำได้ตามงานวิจัย พร้อมน้ำหนักพรีเทรนและเช็กพอยต์README.mdของแต่ละโปรเจ็กต์มีเอกสาร ลิงก์น้ำหนักพรีเทรน และข้อมูลการอ้างอิง<task_name>/<model_name>.yamlให้ค่าการตั้งค่าสำหรับการทำซ้ำการฝึกและการประเมินผล- ตัวอย่างโปรเจ็กต์ได้แก่
kv-prediction,byteformer,catlip,clip,fastvit,mobileone,mobilevit,openelm,resnet,vit
mlx_examples/มี ตัวอย่าง MLX สำหรับรันโมเดล CoreNet อย่างมีประสิทธิภาพบน Apple Silicon- ตัวอย่างที่รวมอยู่คือ
clip,open_elm
- ตัวอย่างที่รวมอยู่คือ
โมเดล ชุดข้อมูล และองค์ประกอบต่าง ๆ
- การติดตั้งใช้งานโมเดลถูกจัดตามประเภทงานภายใต้
corenet/modeling/modelsaudio_classificationclassificationdetectionlanguage_modelingmulti_modal_img_textsegmentation
- คลาสของแต่ละโมเดลจะถูกลงทะเบียนด้วยดีคอเรเตอร์
@MODEL_REGISTRY.register(name="<model_name>", type="<task_name>") - หากต้องการใช้โมเดลในการฝึกหรือประเมินผลของ CoreNet ต้องระบุ
models.<task_name>.name = <model_name>ในการตั้งค่า YAML - ชุดข้อมูลก็ถูกจัดแยกเป็นไดเรกทอรีตามประเภทงานเช่นเดียวกับโมเดล
- องค์ประกอบภายในหลักประกอบด้วย
loss_fn,metrics,optims,schedulertrain_eval_pipelinescollate_fns,sampler,text_tokenizer,transforms,video_readerlayers,modules,neural_augmentor,text_encoders
ความสัมพันธ์กับ CVNets
- CoreNet เป็นโปรเจ็กต์ที่พัฒนาต่อมาจาก CVNets
- ขอบเขตที่ขยายขึ้นครอบคลุมการใช้งานที่กว้างกว่าวิสัยทัศน์คอมพิวเตอร์
- การขยายนี้ทำให้สามารถฝึก foundation model รวมถึง LLM ได้
- หากใช้ CoreNet ทาง README ขอให้ช่วยอ้างอิงงานวิจัย
CVNets: High Performance Library for Computer Vision
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูเหมือนว่า CoreNet พัฒนามาจาก CVNets จนรองรับการใช้งานที่กว้างกว่านอกเหนือจากคอมพิวเตอร์วิทัศน์ และยังสามารถใช้ ฝึกโมเดลพื้นฐาน อย่าง LLM ได้ด้วย
จุดเริ่มต้นน่าจะอยู่ที่นี่: https://apple.github.io/ml-cvnets/index.html
ดูเหมือนเป็นการใช้งานเลเยอร์กลางสำหรับการฝึกและการอนุมาน และเมื่อดู
default_trainer.py[1] แล้ว เอนจินใช้ Tensor ของ torch แต่รูปแบบการฝึกเป็นการใช้งานที่ทำเอง นอกจากนี้ยังทำ learning rate scheduler และ optimizer เองด้วย และผู้เรียกใช้สามารถเลือกใช้ Adam ของ torch ได้การเลือกสร้างจากฐานล่างขึ้นมา แทนที่จะร่วมมือกับเฟรมเวิร์กเดิมเพื่อใส่การรองรับระดับ first-class นั้นน่าสนใจ และอาจเป็นทางเลือกที่เป็น Apple มาก ๆ
ตัวอย่าง MLX ตอนนี้ดูเหมือนจะใช้สำหรับการอนุมานเท่านั้น อย่างไรก็ดี มันอาจเป็นจุดลงจอดสำหรับการใช้งานเฉพาะ MLX ในอนาคตก็ได้: https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
เมื่อคิดรวมถึง Datakalab https://news.ycombinator.com/item?id=40114350 และ DarwinAI https://news.ycombinator.com/item?id=39709835 ที่เพิ่งเข้าซื้อมา ก็น่าสนใจว่าจะติดตามความคืบหน้าในปีหน้ากันอย่างไร
1: https://github.com/apple/corenet/blob/main/corenet/engine/de...
สงสัยเหมือนกันว่าจะมีประโยชน์แค่ไหนสำหรับนักวิจัยที่อยากแก้โครงสร้างโมเดลไปมาหลายแบบ
ตัวอย่าง: https://github.com/apple/corenet/tree/main/projects/clip#tra...
โมเดลส่วนใหญ่ไม่เปิดเผยซอร์สโค้ดการฝึก ชุดข้อมูล การพรีโปรเซส และโค้ดประเมินผล ถ้าอย่างนั้นเรารู้กันจริง ๆ ไหมว่าการใช้งานระดับสูงมีรูปแบบอย่างไร?
Apple ดูเหมือน ตามหลังด้าน AI ไปมาก และตอนนี้กำลังพยายามไล่ตาม
น่าสนใจที่ Apple ยังพัฒนา https://github.com/apple/axlearn ซึ่งเป็นไลบรารีบน Jax อย่างจริงจังด้วย
ดูเหมือนว่าทีมแมชชีนเลิร์นนิงของ Apple ครึ่งหนึ่งใช้ PyTorch ส่วนอีกครึ่งใช้ Jax อาจจะแบ่งกันระหว่าง Google Cloud กับ AWS ก็ได้
ถ้าไม่มีเหตุผลดีพอที่จะทำให้เป็นมาตรฐานบนเครื่องมือเดียว โดยทั่วไปการเลือกเครื่องมือให้เหมาะกับปัญหาที่ทีมกำลังแก้และประสบการณ์ของทีมก็มักง่ายกว่า
เท่าที่รู้ แต่ละองค์กรมี ความเป็นอิสระ ค่อนข้างมาก
ใน README ก็มีอันนี้ด้วย:
CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Dataเพิ่งเคยได้ยิน CatLIP เป็นครั้งแรก และลิงก์ดูเหมือนจะเสีย
สงสัยว่า CatLIP เร็วแค่ไหน ตัวอย่างข้างบนที่อิง OpenAI CLIP ก็เร็วอยู่แล้ว
สร้างบน PyTorch
สงสัยว่าสิ่งนี้เทียบกับ MLX อย่างไร ตามที่เข้าใจคือ MLX เทียบได้กับ PyTorch แต่ปรับแต่งให้เหมาะกับ Apple Silicon
นี่มีไว้เพื่อฝึกโมเดล MLX แบบกระจายหรือเปล่า? หรือมีวัตถุประสงค์อะไร?
mlx_examples/open_elmว่า “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”เมื่อเทียบกับการเอาแบ็กเอนด์ MPS ไปใช้กับ Huggingface Transformers ก็สงสัยว่าข้อดีของการใช้ตัวนี้คืออะไร
mlx_example/clipเป็นตัวอย่างที่แปลงการใช้งานโมเดล CLIP ของ CoreNet ให้เป็นตัวอย่าง CLIP ของ MLX และใส่การปรับแต่งเฉพาะบางส่วนรุ่นย่อย FP16 Base: เร็วขึ้น 60% เมื่อเทียบกับ PyTorch
รุ่นย่อย FP16 Huge: เร็วขึ้น 12%
mlx_example/open_elmเป็นพอร์ต MLX ของโมเดล OpenELM ที่ฝึกด้วย CoreNet โดย MLX เป็นเฟรมเวิร์กดีปเลิร์นนิงของ Apple ที่มีลักษณะคล้าย PyTorch และปรับให้เหมาะกับฮาร์ดแวร์ที่ใช้ Apple Siliconข้อดีน่าจะอยู่ที่มีความเร็วเพิ่มขึ้นอีกจากการปรับเฉพาะสำหรับ Apple Silicon สำหรับโมเดลขนาดเล็ก อาจเป็นเฟรมเวิร์กสำหรับฝึกโครงข่ายประสาทเชิงลึกที่ประหยัดพลังงานที่สุดก็ได้ แต่ต้องรอดูเบนช์มาร์กจริงก่อนถึงจะรู้
ในรีโพซิทอรีนี้มียูทิลิตีที่สะดวกอยู่มาก และยังมีการใช้งานโมเดลทั่วไปกับ ตัวชี้วัดการประเมินผล ฯลฯ ที่ค่อนข้างเรียบร้อยอยู่พอสมควร
พูดอีกอย่างคือ ดูเหมาะกับการเขียนโมเดลใหม่มากกว่าการทำ inference
ถ้ามีเอเจนต์ LLM ที่สร้าง ตัวอย่าง API เล็ก ๆ สำหรับโมเดลและรูปแบบการใช้งานต่าง ๆ ในรีโพซิทอรีแบบนี้ได้อย่างเสถียรก็คงดี
สงสัยว่ารองรับการฝึกบน Apple Silicon หรือไม่ ถ้าไม่ได้พลาดอะไรใน README ก็ยังไม่ชัดเจนนัก
เว้นแต่ว่าจะมี เซิร์ฟเวอร์ส่วนตัว ที่ใช้ Apple Silicon สำหรับงานฝึกภายในเอง
ลองดูโฟลเดอร์แล้ว มีหลายคลาสที่ดูเหมือนแค่สืบทอดคลาสของ PyTorch กับ torchvision โดยไม่ได้ทำอะไรใหม่
ออปติไมเซอร์ทั้งหมด สเคดจูลเลอร์ และเลเยอร์ส่วนใหญ่เป็นแบบนั้น อย่างไรก็ตาม บล็อก ที่เป็นการผสมเลเยอร์จากหลายเปเปอร์มีอยู่พอสมควร และคล้ายกับ
monai.networks.blocksในแง่ “องค์ประกอบ” ก็มีฟังก์ชัน loss และตัวชี้วัดการประเมินผลที่เขียนขึ้นใหม่อยู่บ้าง
สงสัยว่าถ้าจะใช้ไลบรารีสำหรับฝึกและทำ inference โครงข่ายประสาทบน Apple M1 แนะนำอะไรดี อยากใช้จาก C++ หรือ Rust และโครงข่ายประสาทน่าจะมีไม่เกินประมาณ 5 ล้านพารามิเตอร์