2 điểm bởi GN⁺ 2024-04-25 | 1 bình luận | Chia sẻ qua WhatsApp
  • CoreNet là bộ công cụ giúp các nhà nghiên cứu và kỹ sư huấn luyện các mô hình mạng nơ-ron cho nhiều tác vụ khác nhau, từ các mô hình nền tảng như CLIP, LLM đến phân loại đối tượng, phát hiện đối tượng và phân đoạn ngữ nghĩa
  • Trong CoreNet 0.1.1 phát hành vào tháng 10/2024, dự án mới KV Prediction đã được bổ sung, với nghiên cứu liên quan nhằm cải thiện Time to First Token
  • Nhiều nghiên cứu của Apple sử dụng CoreNet, và thư mục projects/ đi kèm các recipe huấn luyện/đánh giá cùng liên kết tới mô hình tiền huấn luyện
  • Mô hình và bộ dữ liệu được tổ chức theo các thư mục riêng cho từng tác vụ, và lớp mô hình được nối vào quy trình huấn luyện/đánh giá thông qua decorator @MODEL_REGISTRY.register cùng giá trị models.<task_name>.name trong cấu hình YAML
  • CoreNet phát triển từ CVNets, mở rộng sang các ứng dụng rộng hơn ngoài thị giác máy tính và phạm vi tới cả huấn luyện mô hình nền tảng bao gồm LLM

Mục đích và phạm vi của CoreNet

  • CoreNet là bộ công cụ mạng nơ-ron sâu để huấn luyện các mô hình tiêu chuẩn cũng như các mô hình mới ở quy mô nhỏ và lớn
  • Phạm vi tác vụ được hỗ trợ bao gồm
    • Mô hình nền tảng: CLIP, LLM
    • Phân loại đối tượng
    • Phát hiện đối tượng
    • Phân đoạn ngữ nghĩa

Cập nhật tháng 10/2024

Nghiên cứu Apple và recipe dự án

Cài đặt và điều kiện chạy

  • Để chạy test, notebook Jupyter và đóng góp, cần cài đặt và kích hoạt Git LFS
  • Trên Linux, khuyến nghị dùng Python 3.10+PyTorch v2.1.0 trở lên
  • Trên macOS, tài liệu cho biết chỉ cần Python 3.9+ của hệ thống là đủ
  • Các phụ thuộc tùy chọn cho xử lý âm thanh/video gồm
    • Linux: libsox-dev, ffmpeg
    • macOS: sox, ffmpeg
  • Do hệ thống tệp của macOS không phân biệt chữ hoa chữ thường nên có thể phát sinh vấn đề với Git; vì vậy cần truy cập kho lưu trữ bằng đúng đường dẫn có kiểu chữ như hiển thị trong ls

Cấu trúc kho lưu trữ và luồng sử dụng

  • tutorials/ cung cấp các ví dụ để bắt đầu với CoreNet
    • Huấn luyện mô hình mới trên bộ dữ liệu mới
    • Hướng dẫn Slurm và huấn luyện đa nút
    • Notebook cho CLIP, phân đoạn ngữ nghĩa và phát hiện đối tượng
  • projects/ cung cấp recipe huấn luyện có thể tái lập theo từng bài báo và các trọng số/checkpoint tiền huấn luyện
    • README.md của mỗi dự án cung cấp tài liệu, liên kết trọng số tiền huấn luyện và thông tin trích dẫn
    • <task_name>/<model_name>.yaml cung cấp cấu hình để tái lập huấn luyện và đánh giá
    • Ví dụ dự án gồm kv-prediction, byteformer, catlip, clip, fastvit, mobileone, mobilevit, openelm, resnet, vit v.v.
  • mlx_examples/ cung cấp các ví dụ MLX để chạy hiệu quả mô hình CoreNet trên Apple Silicon
    • Các ví dụ gồm clip, open_elm

Mô hình, bộ dữ liệu và các thành phần

  • Các triển khai mô hình được tổ chức theo từng tác vụ dưới corenet/modeling/models
    • audio_classification
    • classification
    • detection
    • language_modeling
    • multi_modal_img_text
    • segmentation
  • Mỗi lớp mô hình được đăng ký bằng decorator @MODEL_REGISTRY.register(name="<model_name>", type="<task_name>")
  • Để dùng mô hình trong quá trình huấn luyện hoặc đánh giá của CoreNet, cần chỉ định models.<task_name>.name = <model_name> trong cấu hình YAML
  • Bộ dữ liệu cũng được phân loại theo các thư mục riêng cho từng tác vụ giống như mô hình
  • Các thành phần nội bộ chính gồm
    • loss_fn, metrics, optims, scheduler
    • train_eval_pipelines
    • collate_fns, sampler, text_tokenizer, transforms, video_reader
    • layers, modules, neural_augmentor, text_encoders

Quan hệ với CVNets

  • CoreNet là dự án phát triển từ CVNets
  • Phạm vi mở rộng bao gồm các ứng dụng rộng hơn ngoài thị giác máy tính
  • Sự mở rộng này cho phép huấn luyện mô hình nền tảng bao gồm cả LLM
  • Khi sử dụng CoreNet, README đề nghị trích dẫn bài báo CVNets: High Performance Library for Computer Vision

1 bình luận

 
GN⁺ 2024-04-25
Các ý kiến trên Hacker News
  • CoreNet có vẻ đã phát triển từ CVNets để bao quát các mục đích sử dụng rộng hơn ngoài thị giác máy tính, và có thể cả huấn luyện mô hình nền tảng như LLM
    Điểm xuất phát có lẽ là ở đây: https://apple.github.io/ml-cvnets/index.html
    Nó trông giống một triển khai tầng trung gian cho huấn luyện và suy luận; nhìn vào default_trainer.py[1] thì engine dùng Tensor của torch, nhưng cách huấn luyện là tự triển khai. Bộ lập lịch tốc độ học và optimizer cũng được tự triển khai, còn bên gọi có thể tùy chọn dùng Adam của torch
    Việc chọn xây từ dưới lên thay vì phối hợp với các framework hiện có để đưa vào hỗ trợ hạng nhất khá thú vị, và có lẽ cũng rất đúng kiểu Apple
    Các ví dụ MLX hiện tại có vẻ chỉ dành cho suy luận. Tuy vậy, chúng cũng có thể là điểm đáp cho các triển khai chuyên cho MLX trong tương lai: https://github.com/apple/corenet/blob/5b50eca42bc97f6146b812...
    Nếu tính cả các thương vụ mua lại gần đây như Datakalab https://news.ycombinator.com/item?id=40114350 và DarwinAI https://news.ycombinator.com/item?id=39709835, sẽ rất thú vị để theo dõi trong một năm tới
    1: https://github.com/apple/corenet/blob/main/corenet/engine/de...

    • Giao diện cũng trông khá đúng kiểu Apple. Có vẻ cấu trúc là tạo file cấu hình, đưa vào mô hình và siêu tham số đã định sẵn, rồi nó cung cấp một giao diện đơn giản
      Tôi tò mò không biết nó hữu ích đến đâu với các nhà nghiên cứu muốn mổ xẻ, chỉnh sửa đủ kiểu kiến trúc mô hình
      Ví dụ: https://github.com/apple/corenet/tree/main/projects/clip#tra...
    • Nhận xét về dự án thì đúng, nhưng PyTorch chạy trên Mace và TensorFlow cũng đã được Apple port sang Mac
    • Về nhận định rằng nó trông giống một triển khai tầng trung gian giữa huấn luyện và suy luận: tôi không rành lĩnh vực này, nên tò mò các triển khai huấn luyện hiện đại thực tế trông như thế nào
      Phần lớn mô hình không công bố mã nguồn huấn luyện, tập dữ liệu, tiền xử lý và mã đánh giá. Vậy liệu người ta có biết một triển khai cấp cao trông ra sao không?
    • Khó gọi là tự triển khai; các optimizer đơn giản là kế thừa từ optimizer của PyTorch
    • Việc chọn tự làm từ đầu thay vì phối hợp với các framework hiện có để đưa vào hỗ trợ hạng nhất có mùi hơi vội vàng trước thềm WWDC
      Apple đã tụt lại khá xa trong AI và giờ có vẻ đang cố bắt kịp
  • Thú vị là Apple cũng tích cực phát triển https://github.com/apple/axlearn, một thư viện trên Jax
    Có vẻ một nửa đội máy học của Apple dùng PyTorch, nửa còn lại dùng Jax. Cũng có thể là họ chia ra giữa Google Cloud và AWS

    • Ở các tập đoàn lớn như Apple, chuyện này khá phổ biến. Chi phí điều phối thực sự rất lớn
      Nếu không có lý do chính đáng để chuẩn hóa vào một công cụ duy nhất, thường sẽ dễ hơn khi để đội chọn công cụ phù hợp với bài toán họ đang giải và kinh nghiệm của họ
    • Tôi chưa từng làm trực tiếp ở đó, nhưng luôn nghe nói Apple giống một tập hợp nhiều công ty hoặc startup hơn là một tổ chức nhất quán như Meta
      Tôi hiểu là mỗi tổ chức có mức tự chủ đáng kể
  • README cũng có mục này:
    CatLIP: CLIP-level Visual Recognition Accuracy with 2.7x Faster Pre-training on Web-scale Image-Text Data
    Đây là lần đầu tôi nghe về CatLIP, và có vẻ liên kết bị hỏng

  • Được xây dựng trên PyTorch

  • Tôi tò mò cái này so với MLX thì thế nào. Theo tôi hiểu, MLX tương ứng với PyTorch nhưng được tối ưu cho Apple Silicon
    Cái này dùng để huấn luyện các mô hình MLX theo cách phân tán à? Hay mục đích là gì?

    • MLX cũng có vẻ là một phần của kế hoạch này. https://github.com/apple/corenet liệt kê các ví dụ MLX là một trong các thành phần được công bố vào tháng 4
    • Như viết trong mlx_examples/open_elm, “MLX is an Apple deep learning framework similar in spirit to PyTorch, which is optimized for Apple Silicon based hardware.”
    • Lướt qua README thì nó trông giống một tầng nằm trên MLX. Có vẻ gần với một tầng framework giúp làm máy học dễ hơn
  • Khi so với việc gắn backend MPS vào Huggingface Transformers để dùng, tôi tò mò lợi thế của việc dùng cái này là gì

    • “Các ví dụ MLX minh họa cách chạy các mô hình CoreNet hiệu quả trên Apple Silicon. Vui lòng xem thêm thông tin trong tệp README.md ở thư mục ví dụ tương ứng.”
      mlx_example/clip là ví dụ chuyển phần triển khai mô hình CLIP của CoreNet thành ví dụ CLIP của MLX và thêm một số chỉnh sửa tùy biến
      Biến thể FP16 Base: nhanh hơn 60% so với PyTorch
      Biến thể FP16 Huge: nhanh hơn 12%
      mlx_example/open_elm là bản port MLX của mô hình OpenELM được huấn luyện bằng CoreNet. MLX là framework deep learning của Apple có tính chất tương tự PyTorch và được tối ưu cho phần cứng dựa trên Apple Silicon
      Lợi thế có vẻ là có thêm mức tăng tốc nhờ chuyên biệt cho Apple Silicon. Với các mô hình nhỏ, đây cũng có thể là framework huấn luyện mạng nơ-ron sâu tiết kiệm điện năng nhất, nhưng phải có benchmark thực tế mới biết được
    • Phần triển khai ở đây trông khá gọn gàng và được mô-đun hóa tốt, còn Transformers và Diffusers thì không như vậy, trừ khi chỉ tách riêng các mô-đun ra dùng
      Kho này có nhiều tiện ích thuận tiện, cũng như khá nhiều phần triển khai gọn gàng cho các mô hình phổ biến và chỉ số đánh giá
      Nói cách khác, nó có vẻ phù hợp để viết mô hình mới hơn là để suy luận
    • Không có gì đặc biệt; về cơ bản là PyTorch gắn logo Apple
  • Sẽ thật tốt nếu có một LLM agent có thể tạo ổn định các ví dụ API nhỏ cho nhiều mô hình và cách sử dụng trong những kho kiểu này

  • Tôi tò mò liệu nó có hỗ trợ huấn luyện trên Apple Silicon không. Nếu không phải tôi bỏ sót trong README thì điều đó không rõ ràng lắm

    • Tôi không chắc tính năng huấn luyện như vậy có hữu ích ngoài các thử nghiệm quy mô nhỏ hay không. Apple không còn làm sản phẩm máy chủ nữa, và ngay cả thời họ còn làm thì cũng đắt
      Trừ khi họ có máy chủ riêng không công khai dựa trên Apple Silicon để tự huấn luyện
    • Các ví dụ MLX có vẻ khiến điều này khả thi. Nó trông giống một framework đa dụng hơn là chỉ dành riêng cho Mac
  • Nhìn qua các thư mục, có vẻ có nhiều lớp chỉ kế thừa các lớp PyTorch và torchvision mà không làm gì mới
    Tất cả optimizer, scheduler và phần lớn các layer đều theo kiểu đó. Tuy nhiên có khá nhiều block là tổ hợp layer từ nhiều bài báo, tương tự monai.networks.blocks
    Về mặt “thành phần cấu thành”, cũng có một vài loss function và chỉ số đánh giá được triển khai mới

  • Tôi tò mò mọi người khuyên dùng thư viện nào để huấn luyện và suy luận mạng nơ-ron trên Apple M1. Tôi muốn dùng từ C++ hoặc Rust, và mạng nơ-ron dự kiến tối đa khoảng 5 triệu tham số

    • Nếu là điểm khởi đầu thì tôi sẽ dùng PyTorch. Trên Apple Silicon, backend Metal khá nhanh, và đây là thư viện được dùng rộng rãi nhất, từ lập trình viên làm sở thích cho đến nhà phát triển mô hình nền tảng