چک لیست مترجم StableHLO

در این سند، دستورالعمل‌های پیاده‌سازی و بررسی یک عملیات برای مترجم را خلاصه می‌کنیم. ما عمداً چند مورد اقدام کمکی مربوط به تأیید کننده و استنتاج نوع را با ایده پیشرفت در آن جبهه ها در کنار اجرای مفسر گنجانده ایم.

در حین اجرای عملیات

  1. یک استراتژی آزمایش مکتوب صریح (در یک توضیح روابط عمومی) مشابه این را ارائه دهید تا در حین بررسی روش‌های استنتاج تأیید و نوع و آزمایش‌های مربوطه به‌عنوان مرجع استفاده شود. بازبین دوبار بررسی می کند که توضیحات جامع باشد.
  2. با hlo_evaluator برای شناسایی جزئیات پیاده سازی پیچیده و شکاف های عملکردی احتمالی مشورت کنید.
  3. در صورت یافتن اشکال یا عملکرد مفقود، بلیط برای اجزای نرم افزار مربوطه را فایل کنید.

پس از اجرای عملیات

  1. در StablehloOps.td :

    1. مطمئن شوید که summary در ODS عملیات از فرمت استاندارد پیروی می کند. ( بلیت مربوطه)
    2. نظراتی را که به برچسب‌های محدودیت ارجاع می‌دهند (مثلاً Cn یا In ) از مشخصات در قالب xyz_cn یا xyz_in برای عملیات XyzOp اضافه کنید تا مطابقت بین محدودیت‌ها در ODS و مشخصات را شناسایی کنید. مثال زیر نشان می‌دهد که چگونه می‌توان برچسب‌های محدودیت را به‌عنوان نظر در کنار Traits mlir و TypeConstraints اضافه کرد. نکته xyz_c4 به محدودیت های تعریف شده در کلاس StableHLO_FooOp اشاره دارد (به عنوان مثال StableHLO_ShapedInterfaceOp ، StableHLO_UnaryElementwiseOp ، StableHLO_Op ، و غیره).

       def StableHLO_XyzOp: StableHLO_FooOp<"xyz", [Trait1,
           Trait2 /*xyz_c1, xyz_c2*/, InferTensorType /*xyz_c3*/]> { /*xyz_c4*/
            ...
         let summary = "Xyz operation";
         let arguments = (ins
            1DTensorOf<[HLO_Float]>:$a, /*xyz_c5, xyz_i1*/
            HLO_Tensor:$b, /*xyz_i2*/
            ....
         );
      );
      
  2. در TypeInference.cpp و StablehloOps.cpp :

    1. نظراتی را که عبارت‌هایی مانند «ویژگی‌های زیر را تأیید کنید: ...» می‌گویند را حذف کنید.
    2. نظراتی را که به برچسب‌های محدودیت ارجاع می‌دهند (مثلاً Cn یا In ) از مشخصات با فرمت xyz_cn یا xyz_in ، برای عملیات XyzOp اضافه کنید تا مشخص کنید کدام بخش از تأییدکننده‌ها و توابع شکل با چه محدودیت‌هایی در مشخصات مطابقت دارند.
      1. داشتن یک نظر با چندین برچسب محدودیت یا داشتن چندین نظر با برچسب محدودیت یکسان اشکالی ندارد. همه چیز به نحوه اجرای محدودیت ها بستگی دارد. اگر محدودیت های متوالی وجود دارد، آنها را به صورت xyz_cn...xyz_cm, xyz_in...xyz_jn متراکم کنید.
      2. در صورت عدم تطابق بین محدودیت‌های پیاده‌سازی VS و محدودیت‌های موجود در مشخصات، مطمئن شوید که یک موضوع باز وجود دارد که منعکس کننده آن اختلاف است.
  3. در تست های مترجم :

    1. فایلی به نام <op_mnemonic>.mlir اضافه کنید.
    2. تست ها را با رعایت دستورالعمل های تست بنویسید.
  4. در دایرکتوری testdata :

    1. هر آزمایش غیرفعال شده ای را که توسط عملیات جدید اضافه شده پوشش داده شده است، اجرا کنید.
    2. در صورت موفقیت آمیز بودن تست ها، آنها را با تبدیل RUN-DISABLED به RUN فعال کنید.
    3. اگر آزمایشی به دلایلی غیر از عدم تطابق دقیق با شکست مواجه شد، پیاده سازی/تست را برطرف کنید.
    4. برای عدم تطابق دقیق، تست را با RUN-DISABLED(#1278) تگ کنید (اگر قبلا انجام نشده است).
  5. در ops_stablehlo.mlir :

    1. اطمینان حاصل کنید که حداقل یک تست (مثبت یا منفی) برای هر محدودیت در روش های استنتاج تایید کننده و نوع وجود دارد. محدودیت های پوشش داده شده در ODS آزمایش نخواهند شد. این تست‌ها عمدتاً منفی خواهند بود، آزمایش عدم رعایت یا مثبت بودن محدودیت‌ها، آزمایش درست بودن شکل استنباط‌شده.
    2. اطمینان حاصل کنید که تمام تست های مربوط به عملیات مورد آزمایش در کنار هم قرار گرفته اند.
    3. مطمئن شوید که تمام تست‌های مربوط به عملیات مورد آزمایش با یک ماکرو روشن CHECK-LABEL اضافه شده‌اند.
    4. نام تابع تست ها را با استفاده از قالب xyz_cn_im_... برای یک تابع تست محدودیت های Cn ، Im و غیره برای op XyzOp انتخاب کنید. در مواردی که فرمت پیشنهادی اعمال نمی شود، نام موجود را حفظ کنید.
    5. پس از تکمیل مرحله بالا، تمام تست های مربوط به عملیات تحت آزمایش را بر اساس نام تابع بر اساس حروف الفبا مرتب کنید.
    6. به افزودن آزمایش‌ها ادامه دهید تا زمانی که ccov 90% پوشش را برای عملیات نشان دهد.
  6. در infer_stablehlo.mlir :

    1. مطمئن شوید که تمام محدودیت‌های مربوط به تست‌های استنتاج شکل در این فایل وجود دارد، با پیروی از دستورالعمل‌های نام‌گذاری مشابه ذکر شده در بالا.
    2. هر گونه تست استنتاج شکل را از فایل ops_stablehlo.mlir به این فایل منتقل کنید.
  7. در spec.md :

    1. پیوندی به stablehlo/tests/interpret/<op_mnemonic>.mlir به بخش «نمونه‌ها» اضافه کنید (مثلاً مثال‌های بیشتر ).
    2. مطمئن شوید که مشخصات فقط 1 مثال دارد.
    3. مطمئن شوید که نمونه مشخصات از دستورالعمل‌های تست پیروی می‌کند.
    4. مطمئن شوید که تست نمونه مشخصات قابل تفسیر است.
    5. مطمئن شوید که نمونه مشخصات با آنچه در ODS است یکسان است.
  8. در status.md :

    1. ستون "مفسر" را به yes به روز کنید.