Quay lại phần Tin tức dành cho nhà phát triển

Mùa hè nguồn mở: xây dựng AI hiệu quả hơn nhờ PyTorch

20 tháng 9, 2022Tác giảSuraj Subramanian

Lưu ý: Chúng tôi trân trọng cảm ơn Less Wright - Kỹ sư đối tác của Meta AI - đã xem xét và bổ sung thêm thông tin chi tiết vào bài viết.

Bài viết về cách xây dựng trí tuệ nhân tạo (AI) hiệu quả này là bài thứ 2 trong loạt bài viết "Mùa hè nguồn mở". Chúng tôi xây dựng loạt bài viết này nhằm mang đến một số thông tin và nguồn lực hữu ích, cũng như nội dung học tập trong các lĩnh vực mà dự án nguồn mở đang tạo ra tác động trên Meta và những nơi khác. Hãy cùng chúng tôi khám phá các lĩnh vực khác mà Meta Open Source cam kết thúc đẩy ngành phát triển bằng cách chia sẻ các công cụ đổi mới và có thể mở rộng.

PyTorch: phát triển từ công nghệ nền tảng thành tổ chức

Kể từ bản phát hành ban đầu năm 2016, PyTorch đã được sử dụng rộng rãi trong cộng đồng công nghệ học sâu. Các root của PyTorch trong nghiên cứu đang liên tục mở rộng để sử dụng trong trường hợp sản xuất. Với sự bùng nổ của công nghệ máy học (ML) và trí tuệ nhân tạo (AI), các phương pháp mới và trường hợp sử dụng mô hình AI liên tục mở rộng, PyTorch đã chuyển sang chương tiếp theo của mình khi trở thành PyTorch Foundation độc lập, mới thành lập dưới sự bảo trợ của Linux Foundation. Tổ chức này bao gồm một hội đồng quản trị đa dạng với các đại diện đến từ AMD, Amazon Web Services, Google Cloud, Microsoft Azure và Nvidia. Hội đồng này dự kiến sẽ mở rộng theo thời gian. Sứ mệnh của tổ chức này là thúc đẩy việc sử dụng công cụ AI thông qua các dự án không phụ thuộc vào nhà cung cấp, đồng thời tạo điều kiện để mọi người dễ dàng tiếp cận các công cụ, thư viện nguồn mở và thành phần khác. Ngoài ra, khi chuyển thành tổ chức, PyTorch và cộng đồng nguồn mở của PyTorch cũng có thể tiếp tục đẩy nhanh lộ trình từ tạo nguyên mẫu đến sản xuất công nghệ AI và ML.

Tinh giản quy trình AI nhờ Meta Open Source

PyTorch là minh chứng tuyệt vời về sức mạnh của nguồn mở. Là một trong những khuôn khổ học sâu nguồn mở đầu tiên, PyTorch đã tạo điều kiện cho mọi người từ nhiều lĩnh vực thử nghiệm công nghệ học sâu và áp dụng công trình của họ trong những lĩnh vực đa dạng. PyTorch hỗ trợ mọi lĩnh vực từ thử nghiệm trong ứng dụng tìm kiếm, phát triển xe tự hành đến radar xuyên đất. Đây chỉ là một số ít ứng dụng mà PyTorch hỗ trợ gần đây. Việc kết hợp thư viện công cụ AI đa năng với cộng đồng nguồn mở đã mở ra khả năng lặp lại nhanh chóng và áp dụng công nghệ trên quy mô lớn cho nhiều trường hợp sử dụng khác nhau.

Khi AI được triển khai rộng rãi hơn, các mô hình có xu hướng tăng kích thước để giải quyết những vấn đề phức tạp hơn. Điều này cũng đồng nghĩa với việc nguồn lực cần để đào tạo các mô hình này đã tăng lên đáng kể. May mắn là nhiều người trong cộng đồng nhà phát triển đã nhận ra nhu cầu về mô hình sử dụng ít nguồn lực hơn - cả từ góc độ thực tế lẫn môi trường. Bài viết này sẽ khám phá lý do lượng tử hóa và các kỹ thuật nén mô hình khác có thể là chất xúc tác để xây dựng AI hiệu quả.

Thiết lập đường cơ sở để sử dụng PyTorch

Bài viết này chủ yếu khám phá một số tính năng bậc trung và nâng cao của PyTorch. Nếu bạn là người mới đang tìm cách bắt đầu hoặc là một chuyên gia đang sử dụng thư viện khác, cách dễ nhất là làm quen với một số kiến thức cơ bản. Hãy xem hướng dẫn dành cho người mới bắt đầu sử dụng PyTorch. Hướng dẫn này giới thiệu quy trình ML hoàn chỉnh thông qua tập dữ liệu Fashion MNIST.

Dưới đây là một số thông tin và nguồn lực khác để bạn tham khảo nếu mới làm quen với PyTorch:

Lượng tử hóa: Áp dụng các kỹ thuật đã được kiểm chứng qua thời gian vào AI

Có nhiều cách thức để xây dựng AI hiệu quả hơn. Việc cùng thiết kế phần cứng và phần mềm để tối ưu hóa cho AI có thể mang lại hiệu quả cao. Tuy nhiên, các giải pháp phần cứng-phần mềm chuyên biệt cần nhiều thời gian và nguồn lực để phát triển. Việc tạo ra kiến trúc nhanh hơn và nhỏ hơn cũng là một cách để đạt được hiệu quả. Tuy nhiên, nhiều kiến trúc này bị mất độ chính xác khi so sánh với mô hình lớn hơn, ít nhất là ở thời điểm hiện tại. Một phương pháp đơn giản hơn là tìm cách giảm nguồn lực cần để đào tạo và phân phối mô hình hiện có. Trong PyTorch, bạn có thể dùng cách nén mô hình thông qua kỹ thuật lượng tử hóa để thực hiện điều trên.

Lượng tử hóa là một kỹ thuật toán học được dùng để tạo ra các file nhạc kỹ thuật số có tổn hao và chuyển đổi tín hiệu tương tự thành tín hiệu kỹ thuật số. Khi thực thi các phép tính toán học với độ chính xác giảm, kỹ thuật lượng tử hóa có thể giúp tăng đáng kể hiệu suất trên nhiều nền tảng phần cứng. Vậy tại sao lượng tử hóa lại khiến AI hiệu quả hơn? Kết quả cho thấy rằng trong một số trường hợp, kỹ thuật tương đối đơn giản này giúp tăng đáng kể tốc độ suy luận mô hình (2 - 4 lần).

Các thông số tạo nên mô hình học sâu thường là số thập phân với độ chính xác dấu phẩy động (FP); mỗi thông số yêu cầu bộ nhớ 16 bit hoặc 32 bit. Khi sử dụng kỹ thuật lượng tử hóa, các số thường được chuyển đổi thành INT4 hoặc INT8, chỉ chiếm 4 hoặc 8 bit. Nhờ vậy mà giảm được dung lượng bộ nhớ cần cho mô hình. Ngoài ra, các nhà sản xuất chip còn thêm thuật toán đặc biệt giúp các phép toán sử dụng số nguyên nhanh hơn so với sử dụng số thập phân.

Các mô hình đào tạo có thể sử dụng 3 phương pháp lượng tử hóa sau: động, tĩnh và đào tạo nhận biết lượng tử hóa (QAT). Bảng dưới đây mô tả thông tin tổng quan ngắn gọn về các lợi ích và nhược điểm của từng phương pháp. Để tìm hiểu cách triển khai từng phương pháp trong quy trình AI, hãy tham khảo bài viết trên blog Lượng tử hóa thực tế trong PyTorch.

Phương pháp lượng tử hóa

Lợi ích

Nhược điểm

Động

  • Dễ sử dụng chỉ với một lệnh gọi API
  • Xử lý độ lệch phân phối mạnh mẽ hơn nên đem lại độ chính xác cao hơn
  • Phù hợp với bộ nhớ dài-ngắn hạn (LSTM) và mô hình Bộ chuyển đổi

Mất thêm chi phí quản lý chung trong mỗi lần chuyển đổi

Tĩnh (còn gọi là PTQ)

  • Suy luận nhanh hơn phương pháp lượng tử hóa động nhờ loại bỏ chi phí quản lý chung

Có thể cần hiệu chuẩn lại thường xuyên để xử lý độ lệch phân phối

Đào tạo nhận biết lượng tử hóa (QAT)

  • Độ chính xác cao hơn phương pháp lượng tử hóa tĩnh
  • Suy luận nhanh hơn phương pháp lượng tử hóa động

Chi phí tính toán cao

Các tính năng bổ sung để đẩy nhanh quy trình AI

Lượng tử hóa không phải là cách duy nhất để AI của PyTorch trở nên hiệu quả hơn. Chúng tôi thường xuyên cập nhật các tính năng. Dưới đây là một số cách khác để PyTorch cải thiện quy trình AI:

  • Chế độ suy luận: Chế độ này có thể được dùng để viết mã PyTorch nếu bạn chỉ sử dụng mã để chạy suy luận. Chế độ suy luận thay đổi một số giả định khi làm việc với tensor để tăng tốc độ suy luận. Nếu cho PyTorch biết rằng bạn sẽ không sử dụng tensor cho một số ứng dụng về sau (trong trường hợp này là autograd), PyTorch sẽ điều chỉnh để mã chạy nhanh hơn trong những trường hợp cụ thể này.

  • Độ chính xác thấp: Lượng tử hóa chỉ hoạt động ở thời điểm suy luận, tức là sau khi bạn đã đào tạo mô hình. Đối với chính quá trình đào tạo, PyTorch sử dụng AMP - hay đào tạo độ chính xác kết hợp tự động - nhằm tìm ra định dạng tốt nhất để sử dụng các tensor (FP16, FP32 hoặc BF16). Mô hình học sâu độ chính xác thấp trong PyTorch có một số ưu điểm: giúp giảm kích thước mô hình, giảm bộ nhớ cần để đào tạo mô hình và giảm năng lượng cần để chạy mô hình. Để tìm hiểu thêm, hãy xem hướng dẫn sử dụng AMP với GPU hỗ trợ CUDA.

  • Channels last: Đối với mô hình thị giác, NHWC - hay còn gọi là channels-last - là một định dạng bộ nhớ tensor nhanh hơn trong PyTorch. Bạn có thể tăng tốc các hoạt động trong PyTorch nhờ lưu trữ dữ liệu ở định dạng channels-last. Việc định dạng các tensor đầu vào ở dạng channels-last giúp giảm chi phí quản lý chung cần để chuyển đổi giữa các loại định dạng khác nhau, qua đó đẩy nhanh tốc độ suy luận.

  • Tối ưu hóa cho suy luận: Nguyên mẫu TorchScript này triển khai một số tùy chọn tối ưu hóa chung để đẩy nhanh tốc độ mô hình trong mọi môi trường, đồng thời giúp chuẩn bị mô hình để suy luận với các cài đặt theo từng bản dựng. Ở thời điểm này, các trường hợp sử dụng chính bao gồm mô hình thị giác trên CPU (và GPU). Vì đây là nguyên mẫu nên bạn có thể gặp sự cố. Hãy báo cáo sự cố xảy ra trong kho lưu trữ GitHub PyTorch.

Khám phá tiềm năng mới trong PyTorch

Các phương pháp mới để đẩy nhanh quy trình AI thường xuyên được cập nhật trên Blog PyTorch. Đây là nơi tuyệt vời để bạn cập nhật các kỹ thuật như BetterTransformer gần đây - kỹ thuật giúp tăng tốc độ và thông lượng trong mô hình Bộ chuyển đổi lên đến 2 lần trong các trường hợp thực thi thường gặp. Nếu muốn tìm hiểu cách triển khai các tính năng cụ thể trong PyTorch, trang công thức cho phép bạn tìm kiếm theo hạng mục như tối ưu hóa mô hình, đào tạo phân tán và khả năng diễn giải. Bài viết này chỉ là một ví dụ về cách các công cụ như PyTorch đang thúc đẩy nguồn mở và AI phát triển.

Để cập nhật những thông tin mới nhất trong Meta Open Source về công nghệ trí tuệ nhân tạo và máy học, hãy truy cập trang web nguồn mở của chúng tôi, đăng ký kênh YouTube của chúng tôi hoặc theo dõi chúng tôi trên Facebook, Twitter LinkedIn.