ពេល NVENC មិនចាប់ផ្តើម: GPU ពេញទៅដោយគំរូ និងកម្មវិធីបង្ហាញដែលប្តូរទៅប្រើវិធីសាស្ត្របម្រុង
វីដេអូ
កម្មវិធីបង្ហាញវីដេអូរបស់យើងដំណើរការលើម៉ាស៊ីនតែមួយជាមួយគំរូភាសាដែលសរសេរស្គ្រីបរបស់វា។ នៅយប់មួយ កម្មវិធីបម្លែងកូដហាដវែរ (hardware encoder) គ្រាន់តែមិនអាចបើកបាន: "CUDA_ERROR_OUT_OF_MEMORY: អនុស្សាវរីយ៍អស់" បន្ទាប់មក "រកមិនឃើញឧបករណ៍ដែលមានសមត្ថភាព"។
អ្វីដែលបានកើតឡើង
ម៉ាស៊ីននេះគឺជាកុំព្យូទ័រលើតុ NVIDIA GB10 ដែល CPU និង GPU ចែករំលែកប្រភពអនុស្សាវរីយ៍តែមួយ។ វាបម្រើគំរូក្នុងស្រុករបស់យើងតាមរយៈ vLLM ហើយ Studio បង្ហាញលើម៉ាស៊ីនតែមួយនោះដោយប្រើ ffmpeg ដោយប្រើ NVENC នៅពេលដែលអាចធ្វើទៅបាន។ ក្នុងអំឡុងពេលសាកល្បង កម្មវិធីបម្លែងកូដបានបរាជ័យក្នុងការបង្កើត CUDA context របស់វា។ ការបរាជ័យនេះកើតឡើងនិងរលត់ក្នុងរយៈពេលប៉ុន្មានវិនាទី: ការពិនិត្យ NVENC ខ្លីមួយបានឆ្លងកាត់ ប៉ុន្តែការបង្ហាញភ្លាមៗបន្ទាប់មកបានបរាជ័យ; ក្នុងការដំណើរការបន្ទាប់ ការពិនិត្យខ្លួនឯងបានបរាជ័យ; ក្នុងការដំណើរការបន្ទាប់ទៀត ទាំងការពិនិត្យ និងការបង្ហាញបានឆ្លងកាត់តាម NVENC។
ហេតុអ្វី
vLLM កំណត់ចំណែកអនុស្សាវរីយ៍ថេរមួយនៃ GPU នៅពេលវាចាប់ផ្តើម សម្រាប់គំរូ និង cache របស់វា។ NVENC ត្រូវការអនុស្សាវរីយ៍តិចតួចរបស់វាសម្រាប់ CUDA context នៃសម័យនីមួយៗ។ នៅពេលដែលម៉ាស៊ីនបម្រើគំរូ និងការងារផ្សេងៗទៀតមិនទុកអ្វីសល់ទេ កម្មវិធីបម្លែងកូដមិនអាចចាប់ផ្តើមបាន ទោះបីជាវាជាម៉ាស៊ីនដាច់ដោយឡែកនៅលើឈីប និងជិតមិនប៉ះពាល់ដល់ការគណនារបស់ GPU ក៏ដោយ។
ការដោះស្រាយ: សម្រេចចិត្តនៅពេលបម្លែងកូដ មិនមែននៅពេលពិនិត្យ
ការពិនិត្យនៅពេលចាប់ផ្តើមប្រាប់អ្នកថា NVENC បានដំណើរការមួយភ្លែតមុននេះ មិនមែនថាវានឹងដំណើរការសម្រាប់ឯកសារបន្ទាប់ទេ។ ដូច្នេះ Studio ព្យាយាមប្រើ NVENC សម្រាប់ការបង្ហាញនីមួយៗ ហើយប្រសិនបើ ffmpeg បរាជ័យ វាដំណើរការតម្រង (filter graph) ដូចគ្នាម្តងទៀតដោយប្រើ libx264។ ឆានែលផ្សាយបន្តផ្ទាល់ដំណើរការការបម្លែងកូដសាកល្បងរយៈពេលកន្លះវិនាទីជាមួយការកំណត់ផ្សាយបន្តផ្ទាល់របស់វាមុនពេលចាប់ផ្តើមនីមួយៗ ហើយប្រើ libx264 ប្រសិនបើ NVENC បរាជ័យលើវា; កំហុស NVENC ឬ CUDA ក្នុងអំឡុងពេលផ្សាយបន្តផ្ទាល់នឹងប្តូរការចាប់ផ្តើមបន្ទាប់ទៅ libx264។ វីដេអូដែលបញ្ចប់នីមួយៗកត់ត្រាថាតើកម្មវិធីបម្លែងកូដណាបានបង្កើតវា ដូច្នេះការប្តូរទៅប្រើវិធីសាស្ត្របម្រុងនឹងបង្ហាញនៅក្នុងឯកសារការងារ ជំនួសឱ្យការឆ្លងកាត់ដោយមិនមានអ្នកចាប់អារម្មណ៍។
តម្លៃនៃការប្តូរទៅប្រើវិធីសាស្ត្របម្រុង
តិចជាងអ្វីដែលយើងរំពឹងទុក។ នៅលើ CPU Arm 20-core នៃម៉ាស៊ីនតែមួយ libx264 បានបង្ហាញវីដេអូ 1080p រយៈពេល 12 វិនាទី ជាមួយចលនាកាមេរ៉ា ការបញ្ចូលអក្សររត់ (burned-in captions) និងការធ្វើឱ្យសំឡេងមានកម្រិតស្តង់ដារ (loudness normalisation) ក្នុងរយៈពេល 7.6 វិនាទី។ សម្រាប់វីដេអូខ្លីដែលធ្វើម្តងក្នុងមួយថ្ងៃ CPU គឺជាកម្មវិធីបម្លែងកូដដែលល្អគ្រប់គ្រាន់។ GPU មានសារៈសំខាន់ខ្លាំងជាងសម្រាប់គំរូរូបភាព ជាជាងសម្រាប់ការបម្លែងកូដ។
ចំណុចសំខាន់
នៅលើម៉ាស៊ីនចែករំលែក ចាត់ទុកកូដអិនកូដឌីង GPU ថាជាជម្រើសបន្ថែម៖ ប្រើវានៅពេលដែលវាអាចបើកបាន ប្ដូរទៅប្រើវិធីសាស្ត្រជំនួសនៅពេលដែលវាមិនអាចបើកបាន ហើយកត់ត្រាថាតើអ្នកបានប្រើវិធីសាស្ត្រណា។ គោលការណ៍ដូចគ្នាក៏អនុវត្តចំពោះមុខងារ GPU ណាមួយដែលត្រូវការអនុស្សាវរីយ៍ផ្ទាល់ខ្លួនរបស់វា លើម៉ាស៊ីនដែលម៉ាស៊ីនបម្រើម៉ូដែលបានកាន់កាប់អនុស្សាវរីយ៍ភាគច្រើនរួចហើយ។ Studio មានមុខងារនេះដំណើរការដោយស្វ័យប្រវត្តិជាលំនាំដើម។