
Open Neural Network Exchange (ONNX) เป็นระบบนิเวศเปิดที่ให้อำนาจแก่นักพัฒนา AI เพื่อเลือกเครื่องมือที่เหมาะสมเมื่อโครงการของพวกเขาวิวัฒนาการ ONNX จัดทำรูปแบบโอเพ่นซอร์สสำหรับโมเดล AI ทั้งการเรียนรู้ลึกและ ML แบบดั้งเดิม มันกำหนดรูปแบบกราฟการคำนวณที่ขยายได้รวมถึงคำจำกัดความของตัวดำเนินการในตัวและประเภทข้อมูลมาตรฐาน ขณะนี้เรามุ่งเน้นไปที่ความสามารถที่จำเป็นสำหรับการอนุมาน (การให้คะแนน)
ONNX ได้รับการสนับสนุนอย่างกว้างขวางและสามารถพบได้ในหลายเฟรมเวิร์กเครื่องมือและฮาร์ดแวร์ การเปิดใช้งานการทำงานร่วมกันระหว่างเฟรมเวิร์กที่แตกต่างกันและการปรับปรุงเส้นทางจากการวิจัยไปจนถึงการผลิตช่วยเพิ่มความเร็วของนวัตกรรมในชุมชน AI เราขอเชิญชวนชุมชนให้เข้าร่วมกับเราและพัฒนา Onnx ต่อไป
ONNX เป็นโครงการชุมชนและรูปแบบการกำกับดูแลแบบเปิดได้อธิบายไว้ที่นี่ เราขอแนะนำให้คุณเข้าร่วมความพยายามและมีส่วนร่วมในข้อเสนอแนะความคิดและรหัส คุณสามารถมีส่วนร่วมในกลุ่มผลประโยชน์พิเศษและคณะทำงานเพื่อกำหนดอนาคตของ ONNX
ตรวจสอบคู่มือการบริจาคของเราเพื่อเริ่มต้น
หากคุณคิดว่าควรเพิ่มผู้ให้บริการบางรายลงในข้อกำหนดของ ONNX โปรดอ่านเอกสารนี้
ตารางการประชุมปกติของคณะกรรมการกำกับดูแลคณะทำงานและ SIG สามารถพบได้ที่นี่
การพบปะสังสรรค์ในชุมชนจัดขึ้นอย่างน้อยปีละครั้ง เนื้อหาจากการประชุมชุมชนก่อนหน้านี้อยู่ที่:
เราขอแนะนำให้คุณเปิดปัญหาหรือใช้ Slack (หากคุณยังไม่ได้เข้าร่วมโปรดใช้ลิงก์นี้เพื่อเข้าร่วมกลุ่ม) สำหรับการสนทนาแบบเรียลไทม์มากขึ้น
ติดตามข่าวล่าสุดด้วยข่าวล่าสุดของ ONNX [Facebook] [Twitter]
กระบวนการแผนงานเกิดขึ้นทุกปี รายละเอียดเพิ่มเติมสามารถดูได้ที่นี่
แพ็คเกจที่ปล่อยออกมา ONNX เผยแพร่ใน PYPI
pip install onnx # or pip install onnx[reference] for optional reference implementation dependenciesแพ็คเกจ ONNX Weekly ได้รับการเผยแพร่ใน PYPI เพื่อเปิดใช้งานการทดลองและการทดสอบก่อน
ONNX อยู่ในรายการการบำรุงรักษาของ VCPKG คุณสามารถใช้ VCPKG เพื่อสร้างและติดตั้งได้อย่างง่ายดาย
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.bat # For powershell
./bootstrap-vcpkg.sh # For bash
./vcpkg install onnxมีการสร้างไบนารีของ ONNX จาก Conda ใน Conda-Forge:
conda install -c conda-forge onnx ก่อนที่จะสร้างจากแหล่งที่มาถอนการติดตั้ง ONNX pip uninstall onnx
C ++ 17 หรือสูงกว่ารุ่นคอมไพเลอร์ C ++ เป็นสิ่งจำเป็นในการสร้าง ONNX จากแหล่งที่มา ถึงกระนั้นผู้ใช้สามารถระบุรุ่น CMAKE_CXX_STANDARD ของตัวเองสำหรับการสร้าง ONNX
หากคุณไม่ได้ติดตั้ง protobuf ONNX จะดาวน์โหลดและสร้าง protobuf ภายในสำหรับการสร้าง onnx
หรือคุณสามารถติดตั้งไลบรารีและเครื่องมือ Protobuf C/C ++ ด้วยตนเองด้วยรุ่นที่ระบุก่อนดำเนินการต่อไป จากนั้นขึ้นอยู่กับวิธีการติดตั้ง protobuf คุณต้องตั้งค่าตัวแปรสภาพแวดล้อม cmake_args เป็น "-donnx_use_protobuf_shared_libs = บน" หรือ "-donnx_use_protobuf_shared_libs = ปิด" ตัวอย่างเช่นคุณอาจต้องเรียกใช้คำสั่งต่อไปนี้:
Linux:
export CMAKE_ARGS= " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "Windows:
set CMAKE_ARGS = " -DONNX_USE_PROTOBUF_SHARED_LIBS=ON "การเปิด/ปิดขึ้นอยู่กับประเภทของไลบรารี protobuf ที่คุณมี ไลบรารีที่ใช้ร่วมกันคือไฟล์ที่ลงท้ายด้วย*.dll/*. ดังนั้น/*. dylib ไลบรารีคงที่เป็นไฟล์ที่ลงท้ายด้วย *.a/ *. lib ตัวเลือกนี้ขึ้นอยู่กับวิธีที่คุณได้รับไลบรารี Protobuf และวิธีการสร้าง และเป็นค่าเริ่มต้น คุณไม่จำเป็นต้องเรียกใช้คำสั่งด้านบนหากคุณต้องการใช้ไลบรารี protobuf แบบคงที่
หากคุณกำลังสร้าง ONNX จากแหล่งที่มาขอแนะนำให้คุณสร้าง protobuf ในพื้นที่เป็นไลบรารีคงที่ เวอร์ชันที่แจกจ่ายด้วย conda-forge เป็น DLL แต่ ONNX คาดว่าจะเป็นห้องสมุดคงที่ การสร้าง protobuf ในพื้นที่ยังช่วยให้คุณควบคุมเวอร์ชันของ protobuf เวอร์ชันที่ทดสอบและแนะนำคือ 3.21.12
คำแนะนำใน readme นี้ถือว่าคุณกำลังใช้ Visual Studio ขอแนะนำให้คุณเรียกใช้คำสั่งทั้งหมดจากเชลล์เริ่มต้นจาก "X64 Native Tools Command Prompt สำหรับ VS 2019" และเก็บเครื่องกำเนิดระบบ Build สำหรับ CMake (เช่น CMake -G "Visual Studio 16 2019") ที่สอดคล้องกันในขณะที่สร้าง protobuf และ ONNX
คุณสามารถรับ protobuf ได้โดยเรียกใช้คำสั่งต่อไปนี้:
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout v21.12
cd cmake
cmake -G " Visual Studio 16 2019 " -A x64 -DCMAKE_INSTALL_PREFIX= < protobuf_install_dir > -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -Dprotobuf_BUILD_SHARED_LIBS=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=OFF .
msbuild protobuf.sln /m /p:Configuration=Release
msbuild INSTALL.vcxproj /p:Configuration=Releaseจากนั้นจะถูกสร้างขึ้นเป็นไลบรารีคงที่และติดตั้งเพื่อ <protobuf_install_dir> โปรดเพิ่มไดเรกทอรี bin (ซึ่งมี protoc.exe) ไปยังเส้นทางของคุณ
set CMAKE_PREFIX_PATH = < protobuf_install_dir > ; %CMAKE_PREFIX_PATH%โปรดทราบ: หาก protobuf_install_dir ของคุณมีช่องว่าง อย่า เพิ่มเครื่องหมายคำพูดรอบ ๆ
ทางเลือก: หากคุณไม่ต้องการเปลี่ยนเส้นทางของคุณคุณสามารถตั้งค่า onnx_protoc_executable แทน
set CMAKE_ARGS = -DONNX_PROTOC_EXECUTABLE= < full_path_to_protoc.exe >จากนั้นคุณสามารถสร้าง onnx เป็น:
git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
# prefer lite proto
set CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pip install -e . -v
ก่อนอื่นคุณต้องติดตั้ง protobuf รุ่น Protobuf Compiler ขั้นต่ำ (PROTOC) ที่ต้องการโดย ONNX คือ 3.6.1 โปรดทราบว่ารุ่น Protoc เก่าอาจไม่ทำงานกับ CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
ผู้ใช้ Ubuntu 20.04 (และใหม่กว่า) อาจเลือกติดตั้ง protobuf ผ่าน
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler ในกรณีนี้จำเป็นต้องเพิ่ม -DONNX_USE_PROTOBUF_SHARED_LIBS=ON cmake_args ในขั้นตอนการสร้าง onnx
วิธีทั่วไปมากขึ้นคือการสร้างและติดตั้งจากแหล่งที่มา ดูคำแนะนำด้านล่างสำหรับรายละเอียดเพิ่มเติม
Debian/Ubuntu:
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout v21.12
git submodule update --init --recursive
mkdir build_source && cd build_source
cmake ../cmake -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
make -j $( nproc )
make installcentos/rhel/fedora:
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout v21.12
git submodule update --init --recursive
mkdir build_source && cd build_source
cmake ../cmake -DCMAKE_INSTALL_LIBDIR=lib64 -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
make -j $( nproc )
make installที่นี่ "-dcmake_position_independent_code = on" เป็นสิ่งสำคัญ โดยเริ่มต้นไลบรารีคงที่จะถูกสร้างขึ้นโดยไม่มีธง "-FPIC" พวกเขาจะไม่ได้รับรหัสอิสระ แต่ไลบรารีที่ใช้ร่วมกันจะต้องเป็นรหัสอิสระ Python C/C ++ ส่วนขยาย (เช่น ONNX) เป็นไลบรารีที่ใช้ร่วมกัน ดังนั้นหากห้องสมุดคงที่ไม่ได้ถูกสร้างขึ้นด้วย "-FPIC" ก็ไม่สามารถเชื่อมโยงกับห้องสมุดที่ใช้ร่วมกันได้
เมื่อสร้างสำเร็จแล้วให้อัปเดตเส้นทางเพื่อรวมเส้นทาง Protobuf
จากนั้นคุณสามารถสร้าง onnx เป็น:
git clone https://github.com/onnx/onnx.git
cd onnx
git submodule update --init --recursive
# Optional: prefer lite proto
export CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pip install -e . -v export NUM_CORES= ` sysctl -n hw.ncpu `
brew update
brew install autoconf && brew install automake
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protobuf-cpp-3.21.12.tar.gz
tar -xvf protobuf-cpp-3.21.12.tar.gz
cd protobuf-3.21.12
mkdir build_source && cd build_source
cmake ../cmake -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release
make -j ${NUM_CORES}
make installเมื่อสร้างสำเร็จแล้วให้อัปเดตเส้นทางเพื่อรวมเส้นทาง Protobuf
จากนั้นคุณสามารถสร้าง onnx เป็น:
git clone --recursive https://github.com/onnx/onnx.git
cd onnx
# Optional: prefer lite proto
set CMAKE_ARGS=-DONNX_USE_LITE_PROTO=ON
pip install -e . -vหลังจากการติดตั้งแล้ว
python -c " import onnx "เพื่อตรวจสอบว่าใช้งานได้
สำหรับรายการเต็มดู cmakelists.txt
USE_MSVC_STATIC_RUNTIME ควรเป็น 1 หรือ 0 ไม่เปิดหรือปิด เมื่อตั้งค่าเป็น 1 onnx ลิงก์แบบคงที่ไปยังไลบรารีรันไทม์ ค่าเริ่มต้น : USE_MSVC_STATIC_RUNTIME=0
DEBUG ควรเป็น 0 หรือ 1 เมื่อตั้งค่าเป็น 1 onnx ถูกสร้างขึ้นในโหมดการดีบัก หรือการดีบักเวอร์ชันของการพึ่งพาคุณต้องเปิดไฟล์ cmakelists และผนวกตัวอักษร d ในตอนท้ายของบรรทัดชื่อแพ็คเกจ ตัวอย่างเช่น NAMES protobuf-lite จะกลายเป็น NAMES protobuf-lited ค่าเริ่มต้น : Debug=0
ONNX_USE_PROTOBUF_SHARED_LIBS ควร ON หรือ OFF ค่าเริ่มต้น : ONNX_USE_PROTOBUF_SHARED_LIBS=OFF USE_MSVC_STATIC_RUNTIME=0 ONNX_USE_PROTOBUF_SHARED_LIBS กำหนดวิธีการเชื่อมโยง ONNX ไปยังไลบรารี protobuf
ON - ONNX จะเชื่อมโยงไปยัง libs ที่ใช้ร่วมกัน protobuf แบบไดนามิก protobuf_use_dlls จะถูกกำหนดตามที่อธิบายไว้ที่นี่OFF - ONNX จะเชื่อมโยงแบบคงที่กับ protobuf ONNX_USE_LITE_PROTO ควร ON หรือ OFF เมื่อตั้งค่าเป็น ON ใช้ lite protobuf แทน protobuf เต็ม ค่าเริ่มต้น : ONNX_USE_LITE_PROTO=OFF
ONNX_WERROR ควร ON หรือ OFF เมื่อตั้ง ON เป็นคำเตือนจะถือว่าเป็นข้อผิดพลาด ค่าเริ่มต้น : ONNX_WERROR=OFF ในการสร้างท้องถิ่น ON ใน CI และการปล่อยท่อ
หมายเหตุ: คำสั่ง import onnx ไม่ทำงานจากไดเรกทอรีเช็คเอาต์ต้นฉบับ ในกรณีนี้คุณจะเห็น ModuleNotFoundError: No module named 'onnx.onnx_cpp2py_export' เปลี่ยนเป็นไดเรกทอรีอื่นเพื่อแก้ไขข้อผิดพลาดนี้
หากคุณพบปัญหาใด ๆ ในขณะที่สร้าง Protobuf เป็นห้องสมุดคงที่โปรดตรวจสอบให้แน่ใจว่าไม่ได้ติดตั้งไลบรารี protobuf เช่น libprotobuf ที่ใช้ร่วมกันในอุปกรณ์ของคุณหรือในสภาพแวดล้อม conda หากมีไลบรารีที่ใช้ร่วมกันเหล่านี้ให้ลบออกเพื่อสร้าง protobuf จากแหล่งที่มาเป็นไลบรารีคงที่หรือข้ามการสร้าง protobuf จากแหล่งที่มาเพื่อใช้เวอร์ชันที่ใช้ร่วมกันโดยตรง
หากคุณพบปัญหาใด ๆ ในขณะที่สร้าง ONNX จากแหล่งที่มาและข้อความแสดงข้อผิดพลาดของคุณอ่าน Could not find pythonXX.lib ให้แน่ใจว่าคุณมีรุ่น Python ที่สอดคล้องกันสำหรับคำสั่งทั่วไปเช่น python และ pip ทำความสะอาดไฟล์บิลด์ที่มีอยู่ทั้งหมดและสร้าง ONNX อีกครั้ง
ONNX ใช้ pytest เป็นไดรเวอร์ทดสอบ ในการเรียกใช้การทดสอบคุณจะต้องติดตั้ง pytest ก่อน:
pip install pytest nbvalหลังจากติดตั้ง pytest ให้ใช้คำสั่งต่อไปนี้เพื่อเรียกใช้การทดสอบ
pytestตรวจสอบคู่มือผู้สนับสนุนสำหรับคำแนะนำ
ใบอนุญาต Apache v2.0
ONNX รหัสโอเพนซอร์ส