2 คะแนน โดย GN⁺ 2024-04-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • CoreNet เป็นทูลคิตที่ช่วยให้นักวิจัยและวิศวกรสามารถฝึกโมเดลโครงข่ายประสาทเทียมสำหรับงานที่หลากหลายได้ ตั้งแต่ foundation model อย่าง CLIP และ LLM ไปจนถึงการจัดประเภทวัตถุ การตรวจจับวัตถุ และ semantic segmentation
  • ในเดือนตุลาคม 2024 CoreNet 0.1.1 ได้เพิ่มโปรเจ็กต์ใหม่ KV Prediction และงานวิจัยที่เกี่ยวข้องมีเป้าหมายเพื่อปรับปรุง Time to First Token
  • งานวิจัยหลายชิ้นของ Apple ใช้ CoreNet และในโฟลเดอร์ projects/ มีทั้งสูตรการฝึก/ประเมินผลและลิงก์ไปยังโมเดลที่พรีเทรนไว้แล้ว
  • โมเดลและชุดข้อมูลถูกจัดเป็นไดเรกทอรีตามประเภทงาน และคลาสของโมเดลจะเชื่อมกับการฝึก/ประเมินผลผ่านดีคอเรเตอร์ @MODEL_REGISTRY.register และค่าการตั้งค่า YAML models.<task_name>.name
  • CoreNet พัฒนาต่อมาจาก CVNets เพื่อรองรับการใช้งานที่กว้างกว่าวิสัยทัศน์คอมพิวเตอร์ และขยายขอบเขตไปถึงการฝึก foundation model รวมถึง LLM

วัตถุประสงค์และขอบเขตของ CoreNet

  • CoreNet เป็นทูลคิตโครงข่ายประสาทเทียมเชิงลึกสำหรับฝึกทั้งโมเดลมาตรฐานและโมเดลใหม่ทั้งขนาดเล็กและขนาดใหญ่
  • ขอบเขตของงานที่รองรับประกอบด้วย
    • Foundation model: CLIP, LLM
    • การจัดประเภทวัตถุ
    • การตรวจจับวัตถุ
    • semantic segmentation

อัปเดตเดือนตุลาคม 2024

งานวิจัยของ Apple และสูตรโปรเจ็กต์

การติดตั้งและเงื่อนไขการใช้งาน

  • สำหรับการทดสอบ การรัน Jupyter notebook และการมีส่วนร่วม จำเป็นต้องติดตั้งและเปิดใช้งาน Git LFS
  • บน Linux แนะนำให้ใช้ Python 3.10+ และ PyTorch v2.1.0 ขึ้นไป
  • บน macOS ระบุว่าสามารถใช้ Python 3.9+ ของระบบได้เพียงพอ
  • ดีเพนเดนซีเสริมสำหรับการประมวลผลเสียงและวิดีโอมีดังนี้
    • Linux: libsox-dev, ffmpeg
    • macOS: sox, ffmpeg
  • ระบบไฟล์ของ 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/models
    • audio_classification
    • classification
    • detection
    • language_modeling
    • multi_modal_img_text
    • segmentation
  • คลาสของแต่ละโมเดลจะถูกลงทะเบียนด้วยดีคอเรเตอร์ @MODEL_REGISTRY.register(name="<model_name>", type="<task_name>")
  • หากต้องการใช้โมเดลในการฝึกหรือประเมินผลของ CoreNet ต้องระบุ models.<task_name>.name = <model_name> ในการตั้งค่า YAML
  • ชุดข้อมูลก็ถูกจัดแยกเป็นไดเรกทอรีตามประเภทงานเช่นเดียวกับโมเดล
  • องค์ประกอบภายในหลักประกอบด้วย
    • loss_fn, metrics, optims, scheduler
    • train_eval_pipelines
    • collate_fns, sampler, text_tokenizer, transforms, video_reader
    • layers, modules, neural_augmentor, text_encoders

ความสัมพันธ์กับ CVNets

  • CoreNet เป็นโปรเจ็กต์ที่พัฒนาต่อมาจาก CVNets
  • ขอบเขตที่ขยายขึ้นครอบคลุมการใช้งานที่กว้างกว่าวิสัยทัศน์คอมพิวเตอร์
  • การขยายนี้ทำให้สามารถฝึก foundation model รวมถึง LLM ได้
  • หากใช้ CoreNet ทาง README ขอให้ช่วยอ้างอิงงานวิจัย CVNets: High Performance Library for Computer Vision

1 ความคิดเห็น

 
GN⁺ 2024-04-25
ความคิดเห็นจาก 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...

    • อินเทอร์เฟซก็ดูค่อนข้างเป็น Apple เช่นกัน ดูเหมือนเป็นโครงสร้างที่ให้สร้างไฟล์ตั้งค่า ใส่โมเดลและ ไฮเปอร์พารามิเตอร์ ที่คิดไว้แล้ว จากนั้นก็มีอินเทอร์เฟซเรียบง่ายให้ใช้
      สงสัยเหมือนกันว่าจะมีประโยชน์แค่ไหนสำหรับนักวิจัยที่อยากแก้โครงสร้างโมเดลไปมาหลายแบบ
      ตัวอย่าง: https://github.com/apple/corenet/tree/main/projects/clip#tra...
    • เรื่องโปรเจกต์นั้นพูดถูก แต่ PyTorch ทำงานบน Mace และ TensorFlow ก็ถูก Apple พอร์ตมายัง Mac แล้ว
    • เกี่ยวกับที่บอกว่าดูเหมือนเป็นการใช้งานเลเยอร์กลางระหว่างการฝึกกับการอนุมาน ผมไม่ค่อยรู้ด้านนี้ เลยสงสัยว่า การใช้งานการฝึกสมัยใหม่ จริง ๆ แล้วหน้าตาเป็นอย่างไร
      โมเดลส่วนใหญ่ไม่เปิดเผยซอร์สโค้ดการฝึก ชุดข้อมูล การพรีโปรเซส และโค้ดประเมินผล ถ้าอย่างนั้นเรารู้กันจริง ๆ ไหมว่าการใช้งานระดับสูงมีรูปแบบอย่างไร?
    • ไม่น่าจะเรียกว่าเป็นการใช้งานของตัวเองได้ เพราะพวก optimizer ก็แค่สืบทอดจาก optimizer ของ PyTorch
    • การเลือกสร้างจากฐานล่างขึ้นมาแทนที่จะร่วมมือกับเฟรมเวิร์กเดิมเพื่อใส่การรองรับระดับ first-class นั้น มีกลิ่นเหมือนเตรียมค่อนข้างเร่งรีบก่อน WWDC
      Apple ดูเหมือน ตามหลังด้าน AI ไปมาก และตอนนี้กำลังพยายามไล่ตาม
  • น่าสนใจที่ Apple ยังพัฒนา https://github.com/apple/axlearn ซึ่งเป็นไลบรารีบน Jax อย่างจริงจังด้วย
    ดูเหมือนว่าทีมแมชชีนเลิร์นนิงของ Apple ครึ่งหนึ่งใช้ PyTorch ส่วนอีกครึ่งใช้ Jax อาจจะแบ่งกันระหว่าง Google Cloud กับ AWS ก็ได้

    • ในบริษัทใหญ่แบบ Apple เรื่องแบบนี้พบได้ค่อนข้างปกติ ต้นทุนการประสานงาน นั้นสูงจริง ๆ
      ถ้าไม่มีเหตุผลดีพอที่จะทำให้เป็นมาตรฐานบนเครื่องมือเดียว โดยทั่วไปการเลือกเครื่องมือให้เหมาะกับปัญหาที่ทีมกำลังแก้และประสบการณ์ของทีมก็มักง่ายกว่า
    • ไม่เคยทำงานที่นั่นโดยตรง แต่ได้ยินมาตลอดว่า Apple ไม่ได้เป็นองค์กรเดียวที่สอดคล้องกันแบบ Meta เท่าไร แต่ใกล้เคียงกับการรวมกันของหลายบริษัทหรือหลายสตาร์ทอัพมากกว่า
      เท่าที่รู้ แต่ละองค์กรมี ความเป็นอิสระ ค่อนข้างมาก
  • ใน README ก็มีอันนี้ด้วย:
    CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
    เพิ่งเคยได้ยิน CatLIP เป็นครั้งแรก และลิงก์ดูเหมือนจะเสีย

  • สร้างบน PyTorch

  • สงสัยว่าสิ่งนี้เทียบกับ MLX อย่างไร ตามที่เข้าใจคือ MLX เทียบได้กับ PyTorch แต่ปรับแต่งให้เหมาะกับ Apple Silicon
    นี่มีไว้เพื่อฝึกโมเดล MLX แบบกระจายหรือเปล่า? หรือมีวัตถุประสงค์อะไร?

    • MLX ก็ดูเหมือนเป็นส่วนหนึ่งของแผนนี้ด้วย ใน https://github.com/apple/corenet มีการระบุ ตัวอย่าง 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.”
    • ลองอ่าน README คร่าว ๆ แล้วดูเหมือนเป็นเลเยอร์บน MLX มากกว่า ดูใกล้เคียงกับ เลเยอร์เฟรมเวิร์ก ที่ทำให้แมชชีนเลิร์นนิงใช้ง่ายขึ้น
  • เมื่อเทียบกับการเอาแบ็กเอนด์ MPS ไปใช้กับ Huggingface Transformers ก็สงสัยว่าข้อดีของการใช้ตัวนี้คืออะไร

    • “ตัวอย่าง MLX แสดงวิธีรันโมเดล CoreNet อย่างมีประสิทธิภาพบน Apple Silicon โปรดดูข้อมูลเพิ่มเติมในไฟล์ README.md ภายในไดเรกทอรีตัวอย่างที่เกี่ยวข้อง”
      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 สำหรับโมเดลขนาดเล็ก อาจเป็นเฟรมเวิร์กสำหรับฝึกโครงข่ายประสาทเชิงลึกที่ประหยัดพลังงานที่สุดก็ได้ แต่ต้องรอดูเบนช์มาร์กจริงก่อนถึงจะรู้
    • การใช้งานในนี้ดูค่อนข้างสะอาดและเป็นโมดูลดี แต่ Transformers กับ Diffusers ไม่เป็นแบบนั้น เว้นแต่จะแยกใช้เฉพาะโมดูลออกมา
      ในรีโพซิทอรีนี้มียูทิลิตีที่สะดวกอยู่มาก และยังมีการใช้งานโมเดลทั่วไปกับ ตัวชี้วัดการประเมินผล ฯลฯ ที่ค่อนข้างเรียบร้อยอยู่พอสมควร
      พูดอีกอย่างคือ ดูเหมาะกับการเขียนโมเดลใหม่มากกว่าการทำ inference
    • ไม่ได้มีอะไรพิเศษ โดยพื้นฐานแล้วคือ PyTorch ที่ติดโลโก้ Apple
  • ถ้ามีเอเจนต์ LLM ที่สร้าง ตัวอย่าง API เล็ก ๆ สำหรับโมเดลและรูปแบบการใช้งานต่าง ๆ ในรีโพซิทอรีแบบนี้ได้อย่างเสถียรก็คงดี

  • สงสัยว่ารองรับการฝึกบน Apple Silicon หรือไม่ ถ้าไม่ได้พลาดอะไรใน README ก็ยังไม่ชัดเจนนัก

    • ไม่แน่ใจว่าฟังก์ชันการฝึกแบบนั้นจะมีประโยชน์นอกเหนือจากการทดลองขนาดเล็กหรือเปล่า Apple ไม่ได้ทำผลิตภัณฑ์เซิร์ฟเวอร์อีกแล้ว และแม้แต่ตอนที่ยังทำอยู่ก็ราคาแพง
      เว้นแต่ว่าจะมี เซิร์ฟเวอร์ส่วนตัว ที่ใช้ Apple Silicon สำหรับงานฝึกภายในเอง
    • ตัวอย่าง MLX ดูเหมือนจะทำให้เป็นไปได้ ดูเหมือนเป็น เฟรมเวิร์กเอนกประสงค์ มากกว่าจะเป็นของเฉพาะ Mac
  • ลองดูโฟลเดอร์แล้ว มีหลายคลาสที่ดูเหมือนแค่สืบทอดคลาสของ PyTorch กับ torchvision โดยไม่ได้ทำอะไรใหม่
    ออปติไมเซอร์ทั้งหมด สเคดจูลเลอร์ และเลเยอร์ส่วนใหญ่เป็นแบบนั้น อย่างไรก็ตาม บล็อก ที่เป็นการผสมเลเยอร์จากหลายเปเปอร์มีอยู่พอสมควร และคล้ายกับ monai.networks.blocks
    ในแง่ “องค์ประกอบ” ก็มีฟังก์ชัน loss และตัวชี้วัดการประเมินผลที่เขียนขึ้นใหม่อยู่บ้าง

  • สงสัยว่าถ้าจะใช้ไลบรารีสำหรับฝึกและทำ inference โครงข่ายประสาทบน Apple M1 แนะนำอะไรดี อยากใช้จาก C++ หรือ Rust และโครงข่ายประสาทน่าจะมีไม่เกินประมาณ 5 ล้านพารามิเตอร์

    • ถ้าเป็นจุดเริ่มต้นคงใช้ PyTorch แบ็กเอนด์ Metal บน Apple Silicon ค่อนข้างเร็ว และเป็นไลบรารีที่ใช้กันแพร่หลายที่สุดตั้งแต่นักพัฒนางานอดิเรกไปจนถึงนักพัฒนาโมเดลฐานราก