[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BY501NESZTA4NSEKX9BSDE":3,"skill-same:01M6BY501NESZTA4NSEKX9BSDE":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6BY501NESZTA4NSEKX9BSDE","benchmark-on-ddp",null,"Measure a LiteRT .tflite model with `benchmark_model` on Developer Device Platform (DDP) lab phones through `litert benchmark --ddp`, or on the Mac you run it from, and turn the session into rows of the performance leaderboard under benchmark\u002Fleaderboard - one matrix entry per model, one session per accelerator, collect results.pb and runtime_info.pb, rebuild board.json, check the page, commit the data. Use when a model needs latency and memory numbers per platform, device and accelerator, or when a new benchmark_model release means re-measuring the board.","google-ai-edge\u002Flitert-samples","google-ai-edge","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F150697620?v=4","01M6BY4NHMZF88PJAC1E1QJY8N","01M6BY4NNXP8PC95Y6CABCJXP9",494,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Fbenchmark-on-ddp\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31],"benchmark","benchmark on ddp","memory","performance","litert","commit","run","release","collect","developer","data","json","model","page","2026-11-10 10:12:30",false,"---\nname: benchmark-on-ddp\ndescription: Measure a LiteRT .tflite model with `benchmark_model` on Developer Device Platform (DDP) lab phones through `litert benchmark --ddp`, or on the Mac you run it from, and turn the session into rows of the performance leaderboard under benchmark\u002Fleaderboard - one matrix entry per model, one session per accelerator, collect results.pb and runtime_info.pb, rebuild board.json, check the page, commit the data. Use when a model needs latency and memory numbers per platform, device and accelerator, or when a new benchmark_model release means re-measuring the board.\n---\n\n# Benchmark on DDP\n\nA board row is done when three things hold:\n\n1. it comes from the `results.pb` of one benchmark job, with the delegate and the nodes it replaced (`N\u002FM`) from that job's `runtime_info.pb`, or from the log's `Replacing N out of M` line where a session has no such file,\n2. it names the model file, the platform, the device id, the accelerator and the `benchmark_model` release,\n3. `data\u002Fboard.json` was rebuilt from `data\u002Fmeasurements.jsonl` and the page shows it.\n\nA number without those is not a row. This skill covers `.tflite` models on [LiteRT](https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert); a [LiteRT-LM](https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002FLiteRT-LM)\nbundle is one `litert benchmark \u003Cbundle>.litertlm --ddp` session per backend, collected by `collect_lm.py` (the board README, step 5). Every DDP session consumes device time billed to the Google Cloud project; the dry run prints every command it would run, so read it first. A run on the Mac you are on bills nothing.\n\n## Before you start\n\n- `python3` with PyYAML, and `protoc` on PATH (`brew install protobuf`, or `apt install protobuf-compiler`).\n- For new DDP sessions: `gcloud auth application-default login`, a project with the Device Run API enabled (`run_matrix.py --gcp-project` or `LITERT_GCP_PROJECT`),\n  and the `litert` CLI of [LiteRT-CLI](https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002FLiteRT-CLI) with the `--ddp` target (release 0.2.1 or newer; `litert-cli-nightly` has it too). Its DDP runs default to the LiteRT 2.2.0 `benchmark_model` (0.2.1); a row carries the version the job ran:\n\n```bash\npip install litert-cli\n```\n\n- For rows from a macOS host (Apple silicon; `run_local.py` exits on any other machine): nothing more; it fetches the macOS binary of the pinned release.\n\n## Loop\n\nWork from the board folder, `cd benchmark\u002Fleaderboard`; every command below is relative to it, and the driver sits in `..\u002Fdriver\u002F`.\n\n**1. One model, one matrix entry.** In `..\u002Fdriver\u002Fmatrix.yaml` add `repo` (the Hugging Face repo), `file` (one `.tflite`; a repo with several variants gets one entry per\nvariant you want on the board), `task` (the repo's pipeline tag) and `accelerators`. Platforms and DDP devices are listed once under `platforms`.\n\n**2. Print the plan, then run it.** On DDP:\n\n```bash\npython3 ..\u002Fdriver\u002Frun_matrix.py --dry-run --only litert-community\u002FMobileNet-v2\nLITERT_GCP_PROJECT=your-project-id python3 ..\u002Fdriver\u002Frun_matrix.py --only litert-community\u002FMobileNet-v2\n```\n\nThe dry run prints one `litert benchmark … --ddp` line per accelerator, each followed by the `collect.py` call that turns its session into rows. The second\nline submits each session, waits for it, pulls the job outputs to `~\u002F.cache\u002Flitert-cli\u002Fddp\u002F\u003Csession>\u002F\u003Cjob>\u002F`, collects them and rebuilds the board; `--only \u003Crepo>`\nlimits it to one model. On a macOS host, the same two steps with `run_local.py` (same `--only`): the dry run names the machine and the session; the run writes `~\u002F.cache\u002Flitert-samples-benchmark\u002Flocal\u002F\u003Csession>\u002F\u003Cjob>\u002F`, collects it and rebuilds the board:\n\n```bash\npython3 ..\u002Fdriver\u002Frun_local.py --dry-run --only litert-community\u002FMobileNet-v2\npython3 ..\u002Fdriver\u002Frun_local.py --only litert-community\u002FMobileNet-v2\n```\n\n**3. Or collect a session you already have** (step 2's drivers collect their own).\n\n```bash\npython3 ..\u002Fdriver\u002Fcollect.py ~\u002F.cache\u002Flitert-cli\u002Fddp\u002Fsession-fff9643f --model litert-community\u002FMobileNet-v2\n```\n\nOne row per job; a row with the same id replaces the earlier one, so a re-run is safe. A job with no results is printed on stderr and skipped: read the\ntail of its log before submitting it again. A DDP session is Android, named from the matrix; a session from `run_local.py` or from `..\u002Fios\u002Frun_ios.sh` (an\niPhone) carries its platform, device and OS in `session.json`. The row's runtime version is `collect.py --runtime-version` (the CLI's pin) if given, else the session's, else `runtime.version` from the matrix.\n\n**4. Rebuild the board (after step 3; step 2 did it) and look at the row.**\n\n```bash\npython3 ..\u002Fdriver\u002Fbuild_board.py\npython3 -m http.server 8000\n```\n\nOpen http:\u002F\u002Flocalhost:8000\u002F (any free port) and click the new row. Nodes delegated reads `N\u002FM` with `N = M` for a graph that ran fully on the\naccelerator; a low `N` on a GPU row means most of the graph ran on the CPU, and a session without `runtime_info.pb` reads n\u002Fa. A GPU row with Init far above Median is the delegate initializing the graph, not a defect. `Numbers from: log`\nmeans `results.pb` could not be decoded, usually a missing `protoc`: install it and collect again.\n\n**5. Commit the data.** `..\u002Fdriver\u002Fmatrix.yaml`, `data\u002Fmeasurements.jsonl` and `data\u002Fboard.json` in one commit; the page is static.\n\n## Watch for\n\n- **A new `benchmark_model` release is a new row, not an edit.** The row id carries the runtime version; the board shows the newest per model,\n  platform, device and accelerator, and earlier rows stay in `measurements.jsonl`.\n- **DDP device names come from the matrix.** An id it does not list renders as the id; add it under `platforms.android.devices.measured` first. A Mac names itself from `system_profiler`.\n- **A session's jobs run at once, each on its own lab unit.** Two jobs of one session are two phones (the session report names only the device id;\n  `getprop ro.serialno` in the job tells the units apart): compare runs inside one job, and read a row from another job as another phone's.\n- **Some lab units start with lowered CPU clock ceilings.** All 8 m1q-36 units of a 2026-10-15 session sat below their hardware maximum before the first run\n  (policy0 3187 of 3629 MHz, policy6 3398 of 4742 MHz, `scaling_max_freq` against `cpuinfo_max_freq`), so a CPU number from such a unit is the lowered clock's.\n- **Job arguments are split at spaces.** 13 arguments, the last a command line with five spaces, reached the binary as 18 (`argc: 18`); a wrapper of your own\n  takes such a command line last and joins it, or passes no spaces.\n- **Pulled logcats carry the lab network's identifiers** (Wi-Fi network names and their hashes, access-point and device MAC addresses, private IPv4 and IPv6\n  addresses): keep `logcat.txt` out of a public commit, or replace those strings first.\n- **A LiteRT-LM run with a real prompt file** (chat template, text check) is outside this CLI's DDP target (fixed benchmark flags, no prompt push);\n  [edge-llm-bench](https:\u002F\u002Fgithub.com\u002Fjohn-rocky\u002Fedge-llm-bench)'s `bench matrix \u003Ccells> --ddp \u003Cid>` runs those with its own LiteRT-LM build.\n- **Never edit a row by hand.** Re-collect the session; the drivers are the only writers.\n\n## Tested on\n\nmacOS host (Mac Studio, M4 Max, macOS 27.0), Python 3.14, protoc 34.1. 2026-09-18: the Android rows in the repo (21 model files) came from `run_matrix.py` end to end, 42\nsessions on caiman-35 (Pixel 9 Pro) and pa3q-35 (Galaxy S25 Ultra), CPU and GPU, binary 2.2.0; the macOS rows (the same files) from `run_local.py` end to end on that Mac; every row was then re-collected from the cached outputs and the board rebuilt. 2026-10-07: the install line above was run in a fresh venv (litert-cli 0.2.1; `litert benchmark --help` lists `--ddp` and the `.litertlm` bundle options, as does litert-cli-nightly 0.3.0.dev20261006), and the dry runs, `collect.py` and `build_board.py` were re-run on the same host.\n","# Benchmark on DDP\n\nA board row is done when three things hold:\n\n1. it comes from the `results.pb` of one benchmark job, with the delegate and the nodes it replaced (`N\u002FM`) from that job's `runtime_info.pb`, or from the log's `Replacing N out of M` line where a session has no such file,\n2. it names the model file, the platform, the device id, the accelerator and the `benchmark_model` release,\n3. `data\u002Fboard.json` was rebuilt from `data\u002Fmeasurements.jsonl` and the page shows it.\n\nA number without those is not a row. This skill covers `.tflite` models on [LiteRT](https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert); a [LiteRT-LM](https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002FLiteRT-LM)\nbundle is one `litert benchmark \u003Cbundle>.litertlm --ddp` session per backend, collected by `collect_lm.py` (the board README, step 5). Every DDP session consumes device time billed to the Google Cloud project; the dry run prints every command it would run, so read it first. A run on the Mac you are on bills nothing.\n\n## Before you start\n\n- `python3` with PyYAML, and `protoc` on PATH (`brew install protobuf`, or `apt install protobuf-compiler`).\n- For new DDP sessions: `gcloud auth application-default login`, a project with the Device Run API enabled (`run_matrix.py --gcp-project` or `LITERT_GCP_PROJECT`),\n  and the `litert` CLI of [LiteRT-CLI](https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002FLiteRT-CLI) with the `--ddp` target (release 0.2.1 or newer; `litert-cli-nightly` has it too). Its DDP runs default to the LiteRT 2.2.0 `benchmark_model` (0.2.1); a row carries the version the job ran:\n\n```bash\npip install litert-cli\n```\n\n- For rows from a macOS host (Apple silicon; `run_local.py` exits on any other machine): nothing more; it fetches the macOS binary of the pinned release.\n\n## Loop\n\nWork from the board folder, `cd benchmark\u002Fleaderboard`; every command below is relative to it, and the driver sits in `..\u002Fdriver\u002F`.\n\n**1. One model, one matrix entry.** In `..\u002Fdriver\u002Fmatrix.yaml` add `repo` (the Hugging Face repo), `file` (one `.tflite`; a repo with several variants gets one entry per\nvariant you want on the board), `task` (the repo's pipeline tag) and `accelerators`. Platforms and DDP devices are listed once under `platforms`.\n\n**2. Print the plan, then run it.** On DDP:\n\n```bash\npython3 ..\u002Fdriver\u002Frun_matrix.py --dry-run --only litert-community\u002FMobileNet-v2\nLITERT_GCP_PROJECT=your-project-id python3 ..\u002Fdriver\u002Frun_matrix.py --only litert-community\u002FMobileNet-v2\n```\n\nThe dry run prints one `litert benchmark … --ddp` line per accelerator, each followed by the `collect.py` call that turns its session into rows. The second\nline submits each session, waits for it, pulls the job outputs to `~\u002F.cache\u002Flitert-cli\u002Fddp\u002F\u003Csession>\u002F\u003Cjob>\u002F`, collects them and rebuilds the board; `--only \u003Crepo>`\nlimits it to one model. On a macOS host, the same two steps with `run_local.py` (same `--only`): the dry run names the machine and the session; the run writes `~\u002F.cache\u002Flitert-samples-benchmark\u002Flocal\u002F\u003Csession>\u002F\u003Cjob>\u002F`, collects it and rebuilds the board:\n\n```bash\npython3 ..\u002Fdriver\u002Frun_local.py --dry-run --only litert-community\u002FMobileNet-v2\npython3 ..\u002Fdriver\u002Frun_local.py --only litert-community\u002FMobileNet-v2\n```\n\n**3. Or collect a session you already have** (step 2's drivers collect their own).\n\n```bash\npython3 ..\u002Fdriver\u002Fcollect.py ~\u002F.cache\u002Flitert-cli\u002Fddp\u002Fsession-fff9643f --model litert-community\u002FMobileNet-v2\n```\n\nOne row per job; a row with the same id replaces the earlier one, so a re-run is safe. A job with no results is printed on stderr and skipped: read the\ntail of its log before submitting it again. A DDP session is Android, named from the matrix; a session from `run_local.py` or from `..\u002Fios\u002Frun_ios.sh` (an\niPhone) carries its platform, device and OS in `session.json`. The row's runtime version is `collect.py --runtime-version` (the CLI's pin) if given, else the session's, else `runtime.version` from the matrix.\n\n**4. Rebuild the board (after step 3; step 2 did it) and look at the row.**\n\n```bash\npython3 ..\u002Fdriver\u002Fbuild_board.py\npython3 -m http.server 8000\n```\n\nOpen http:\u002F\u002Flocalhost:8000\u002F (any free port) and click the new row. Nodes delegated reads `N\u002FM` with `N = M` for a graph that ran fully on the\naccelerator; a low `N` on a GPU row means most of the graph ran on the CPU, and a session without `runtime_info.pb` reads n\u002Fa. A GPU row with Init far above Median is the delegate initializing the graph, not a defect. `Numbers from: log`\nmeans `results.pb` could not be decoded, usually a missing `protoc`: install it and collect again.\n\n**5. Commit the data.** `..\u002Fdriver\u002Fmatrix.yaml`, `data\u002Fmeasurements.jsonl` and `data\u002Fboard.json` in one commit; the page is static.\n\n## Watch for\n\n- **A new `benchmark_model` release is a new row, not an edit.** The row id carries the runtime version; the board shows the newest per model,\n  platform, device and accelerator, and earlier rows stay in `measurements.jsonl`.\n- **DDP device names come from the matrix.** An id it does not list renders as the id; add it under `platforms.android.devices.measured` first. A Mac names itself from `system_profiler`.\n- **A session's jobs run at once, each on its own lab unit.** Two jobs of one session are two phones (the session report names only the device id;\n  `getprop ro.serialno` in the job tells the units apart): compare runs inside one job, and read a row from another job as another phone's.\n- **Some lab units start with lowered CPU clock ceilings.** All 8 m1q-36 units of a 2026-10-15 session sat below their hardware maximum before the first run\n  (policy0 3187 of 3629 MHz, policy6 3398 of 4742 MHz, `scaling_max_freq` against `cpuinfo_max_freq`), so a CPU number from such a unit is the lowered clock's.\n- **Job arguments are split at spaces.** 13 arguments, the last a command line with five spaces, reached the binary as 18 (`argc: 18`); a wrapper of your own\n  takes such a command line last and joins it, or passes no spaces.\n- **Pulled logcats carry the lab network's identifiers** (Wi-Fi network names and their hashes, access-point and device MAC addresses, private IPv4 and IPv6\n  addresses): keep `logcat.txt` out of a public commit, or replace those strings first.\n- **A LiteRT-LM run with a real prompt file** (chat template, text check) is outside this CLI's DDP target (fixed benchmark flags, no prompt push);\n  [edge-llm-bench](https:\u002F\u002Fgithub.com\u002Fjohn-rocky\u002Fedge-llm-bench)'s `bench matrix \u003Ccells> --ddp \u003Cid>` runs those with its own LiteRT-LM build.\n- **Never edit a row by hand.** Re-collect the session; the drivers are the only writers.\n\n## Tested on\n\nmacOS host (Mac Studio, M4 Max, macOS 27.0), Python 3.14, protoc 34.1. 2026-09-18: the Android rows in the repo (21 model files) came from `run_matrix.py` end to end, 42\nsessions on caiman-35 (Pixel 9 Pro) and pa3q-35 (Galaxy S25 Ultra), CPU and GPU, binary 2.2.0; the macOS rows (the same files) from `run_local.py` end to end on that Mac; every row was then re-collected from the cached outputs and the board rebuilt. 2026-10-07: the install line above was run in a fresh venv (litert-cli 0.2.1; `litert benchmark --help` lists `--ddp` and the `.litertlm` bundle options, as does litert-cli-nightly 0.3.0.dev20261006), and the dry runs, `collect.py` and `build_board.py` were re-run on the same host.\n",{"name":5,"description":7},"main","9467001474dc4e072ebc588e5eb9b5fdcf63abbc","skills\u002Fbenchmark-on-ddp",134,"https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples","https:\u002F\u002Fdevelopers.google.com\u002Fedge\u002Flitert","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge","2026-11-13 14:36:51",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add google-ai-edge\u002Flitert-samples --skill benchmark-on-ddp",{"tool":51,"command":52},"bunx","bunx skills add google-ai-edge\u002Flitert-samples --skill benchmark-on-ddp",{"tool":54,"command":55},"pnpm","pnpm dlx skills add google-ai-edge\u002Flitert-samples --skill benchmark-on-ddp","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Fbenchmark-on-ddp\u002FSKILL.md",true,[],[60,75,95,125,142,161],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":32},"01M6BY5T6RQENC1DMWZ8NZ8JFF","on-device-verification","Prove a converted or quantized LiteRT model on the actual device via the CompiledModel API - confirm GPU residency, compare device output against the source model, and diagnose device-only failures such as silent CPU fallback, whole-graph compile ceilings, and fp16 range breaks. Use after conversion or quantization, when device output is wrong or NaN, when a clean graph fails to compile only on device, or when GPU and CPU outputs are suspiciously identical.","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Fon-device-verification\u002FSKILL.md",[],[67,68,69,70,71,72,73,30,22,74],"on device verification","verification","graph","api","FP16","compile","diagnose","gpu",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":32},"01M6BY5F447DRN3YDJVRWDG9MZ","litert-google-tensor","Compiles LiteRT (.tflite) models ahead-of-time for Google Tensor TPUs (Tensor G5 on Pixel 10, Tensor G6 on Pixel 11) locally on Linux x86_64 or remotely via Google Colab (--colab on macOS, Windows, or ARM hosts), benchmarks them on a USB-attached Pixel with LiteRT's benchmark_model (NPU latency, peak memory, TPU tile time, TPU energy, optional CPU baseline), and packages compiled models for an Android Gradle app as a Google Play AI pack with the Tensor NPU runtime module and a Kotlin loader, applies it to the app and verifies it on a Pixel. Use when the user asks to compile, AOT-compile, or prepare a .tflite model for the Pixel TPU\u002FNPU, check whether a .tflite is already Tensor-compiled, measure on-device NPU performance of a compiled model, or package or deploy a compiled model into their Android app (or replace the one it ships). Don't use for Qualcomm, MediaTek, or Samsung NPUs, GPU-only benchmarking, LiteRT-LM or LLM (.litertlm) models, on-device JIT compilation, non-Gradle builds, or publishing to Google Play.","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Flitert-google-tensor\u002FSKILL.md",[],[82,83,84,22,21,72,20,30,85,86,18,87,88,89,90,91,92,74,93,94],"google","litert google tensor","tensor","windows","package","linux","baseline","tpu","benchmarking","packages","android","play","kotlin",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":106,"publishedAt":32},"01M6BY5BY9H6SDG9GRRTT04EWA","litert-conversion-workflow","Convert a Hugging Face LLM or vision-language model checkpoint into a .litertlm bundle that runs on the LiteRT-LM runtime with verified quality - classify the architecture against known runtime walls, pick the recipe family (dense, reasoning, hybrid SSM, VLM), export, quantize, gate the result against the source model, and publish. Use when converting a new LLM or VLM to LiteRT-LM, when a converted bundle crashes on the first message or dies at engine creation, when a quantized model answers worse than its source, or when deciding whether a model is convertible at all.","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Flitert-conversion-workflow\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[107,108,22,109,110,111,112,113,114,115,116,117,118,119,120,121,122,30,123,124],"conversion","workflow","litert conversion workflow","source","face","hugging face","verified","export","quantize","at","result","classify","message","creation","architecture","pick","publish","recipe",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":32},"01M6BY5835F3RMMW9KCCZ006JM","litert-compiled-model-migration","Rapidly migrate an Android application from legacy TensorFlow Lite (TFLite) to the modern LiteRT CompiledModel API (2.x) in Open Source GitHub repositories, keeping the TensorFlow Lite Support Library as LiteRT Support (litert-support 2.3.0). Covers buffer reuse, NPU JIT compilation, a reference implementation, and a two-stage verification gate (compile check, then an on-device parity test against a golden output).","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Flitert-compiled-model-migration\u002FSKILL.md",[],[132,30,22,72,133,134,135,136,137,138,139,68,92,70,140,141],"litert compiled model migration","tensorflow","open","library","jit","support","github","test","migrate","open source",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":32},"01M6BY55P8GVX66H0FG8JHXHWF","gpu-clean-conversion","Convert a PyTorch or Hugging Face model into a LiteRT model that runs fully on the GPU via the CompiledModel API with verified-correct output, and lay it out as a model recipe. Use when converting a new model, or when a converted model is rejected by the GPU, falls back to CPU, or returns wrong numbers on device.","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Fgpu-clean-conversion\u002FSKILL.md",[],[107,149,74,150,151,112,113,152,153,154,155,124,156,157,22,70,158,159,160,30],"clean","gpu clean conversion","output","CPU","via","with","use","as","back","convert","pytorch","correct",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":167,"publishedAt":32},"01M6BY52X9KX3VRXQJS622DZH3","compiled-model-app-scaffolding","Build a new Android app (Kotlin, Compose) around a verified LiteRT model using the CompiledModel API - the app architecture, the inference-layer lifecycle rules, model delivery, and the UI traps that masquerade as model bugs. Use when turning a converted and device-verified model into a demo or product app, when an app's inference layer leaks memory or blocks the UI, or when a model that verified clean looks wrong inside an app.","https:\u002F\u002Fgithub.com\u002Fgoogle-ai-edge\u002Flitert-samples\u002Fblob\u002Fmain\u002Fskills\u002Fcompiled-model-app-scaffolding\u002FSKILL.md",[],[30,168,22,169,20,170,92,171,172,94,173,121,70],"compiled model app scaffolding","product","lifecycle","demo","inference","ui"]