Skip to content

Running on WSL2 Ubuntu 22.04 fails #9

Description

@yhdanid

First, thanks for this.

As litert still does not support native Windows, I tried to run it in WSL2 under Ubuntu 22.04.

lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:        22.04
Codename:       jammy

Nvidia and CUDA seem to be working OK. Also the GPU is set to be used in rendering.

glxinfo | grep "OpenGL renderer"
OpenGL renderer string: D3D12 (NVIDIA GeForce RTX 4080)
vulkaninfo | grep "deviceName"
WARNING: dzn is not a conformant Vulkan implementation, testing use only.
WARNING: dzn is not a conformant Vulkan implementation, testing use only.
        deviceName        = Microsoft Direct3D12 (NVIDIA GeForce RTX 4080 GPU)
        deviceName        = llvmpipe (LLVM 15.0.7, 256 bits)
        deviceName        = Microsoft Direct3D12 (Intel(R) Iris(R) Xe Graphics)

nvidia-smi works as expected and I can see the GPU.

I can run this command fine:

litert-lm run  \
   --from-huggingface-repo=litert-community/gemma-4-E2B-it-litert-lm \
   gemma-4-E2B-it.litertlm \
   --prompt="What is the capital of France?"

And I get a quick response:
The capital of France is **Paris**.

To get parlor up and running, I ran:

  1. uv sync
    in parlor's src directory, and I get the .venv setup OK.
  2. uv run python server.py
    causes an error. I'm including the output below.

It looks to me that the CPU engine backend (software rendering) is being loaded, instead of the GPU's.

nemisis@nemisis-BLACK:/mnt/e/sandbox/parlor/src$ uv run python server.py
Downloading litert-community/gemma-4-E2B-it-litert-lm/gemma-4-E2B-it.litertlm (first run only)...
INFO:     Started server process [737]
INFO:     Waiting for application startup.
/mnt/e/sandbox/parlor/src/server.py:66: DeprecationWarning: 'asyncio.iscoroutinefunction' is deprecated and slated for removal in Python 3.16; use inspect.iscoroutinefunction() instead
  await asyncio.get_event_loop().run_in_executor(None, load_models)
Loading Gemma 4 E2B from /home/nemisis/.cache/huggingface/hub/models--litert-community--gemma-4-E2B-it-litert-lm/snapshots/616f4124e6ff216292f16e7f73ff33b5ba9a4dd4/gemma-4-E2B-it.litertlm...
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1775483829.659911     758 litert_lm_loader.cc:126] LitertLmLoader::Initialize
I0000 00:00:1775483829.661337     758 litert_lm_loader.cc:149] mmap_status is ok
I0000 00:00:1775483829.661497     758 litert_lm_loader.cc:155] status: OK
I0000 00:00:1775483829.661511     758 litert_lm_loader.cc:156] major_version: 1
I0000 00:00:1775483829.661529     758 litert_lm_loader.cc:157] minor_version: 5
I0000 00:00:1775483829.661541     758 litert_lm_loader.cc:158] patch_version: 0
I0000 00:00:1775483829.661556     758 litert_lm_loader.cc:209] section_index: 0
I0000 00:00:1775483829.661568     758 litert_lm_loader.cc:210] section_data_type: LlmMetadataProto
I0000 00:00:1775483829.661579     758 litert_lm_loader.cc:212] section_begin_offset: 16384
I0000 00:00:1775483829.661582     758 litert_lm_loader.cc:213] section_end_offset: 28576
I0000 00:00:1775483829.661584     758 litert_lm_loader.cc:209] section_index: 1
I0000 00:00:1775483829.661602     758 litert_lm_loader.cc:210] section_data_type: SP_Tokenizer
I0000 00:00:1775483829.661614     758 litert_lm_loader.cc:212] section_begin_offset: 32768
I0000 00:00:1775483829.661618     758 litert_lm_loader.cc:213] section_end_offset: 4721781
I0000 00:00:1775483829.661744     758 litert_lm_loader.cc:190] model_type: tf_lite_embedder
I0000 00:00:1775483829.661765     758 litert_lm_loader.cc:209] section_index: 2
I0000 00:00:1775483829.661768     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661770     758 litert_lm_loader.cc:212] section_begin_offset: 4734976
I0000 00:00:1775483829.661771     758 litert_lm_loader.cc:213] section_end_offset: 108546696
I0000 00:00:1775483829.661782     758 litert_lm_loader.cc:190] model_type: tf_lite_per_layer_embedder
I0000 00:00:1775483829.661785     758 litert_lm_loader.cc:209] section_index: 3
I0000 00:00:1775483829.661796     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661807     758 litert_lm_loader.cc:212] section_begin_offset: 108560384
I0000 00:00:1775483829.661810     758 litert_lm_loader.cc:213] section_end_offset: 1393078776
I0000 00:00:1775483829.661812     758 litert_lm_loader.cc:190] model_type: tf_lite_audio_encoder_hw
I0000 00:00:1775483829.661815     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483829.661818     758 litert_lm_loader.cc:209] section_index: 4
I0000 00:00:1775483829.661819     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661830     758 litert_lm_loader.cc:212] section_begin_offset: 1393082368
I0000 00:00:1775483829.661832     758 litert_lm_loader.cc:213] section_end_offset: 1487134648
I0000 00:00:1775483829.661834     758 litert_lm_loader.cc:190] model_type: tf_lite_audio_adapter
I0000 00:00:1775483829.661836     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483829.661837     758 litert_lm_loader.cc:209] section_index: 5
I0000 00:00:1775483829.661839     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661840     758 litert_lm_loader.cc:212] section_begin_offset: 1487142912
I0000 00:00:1775483829.661841     758 litert_lm_loader.cc:213] section_end_offset: 1496584156
I0000 00:00:1775483829.661852     758 litert_lm_loader.cc:190] model_type: tf_lite_end_of_audio
I0000 00:00:1775483829.661854     758 litert_lm_loader.cc:209] section_index: 6
I0000 00:00:1775483829.661856     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661857     758 litert_lm_loader.cc:212] section_begin_offset: 1496596480
I0000 00:00:1775483829.661868     758 litert_lm_loader.cc:213] section_end_offset: 1496603252
I0000 00:00:1775483829.661870     758 litert_lm_loader.cc:190] model_type: tf_lite_vision_encoder
I0000 00:00:1775483829.661872     758 litert_lm_loader.cc:209] section_index: 7
I0000 00:00:1775483829.661883     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661886     758 litert_lm_loader.cc:212] section_begin_offset: 1496612864
I0000 00:00:1775483829.661888     758 litert_lm_loader.cc:213] section_end_offset: 1715702984
I0000 00:00:1775483829.661890     758 litert_lm_loader.cc:190] model_type: tf_lite_vision_adapter
I0000 00:00:1775483829.661892     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483829.661903     758 litert_lm_loader.cc:209] section_index: 8
I0000 00:00:1775483829.661905     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661907     758 litert_lm_loader.cc:212] section_begin_offset: 1715716096
I0000 00:00:1775483829.661909     758 litert_lm_loader.cc:213] section_end_offset: 1720443208
I0000 00:00:1775483829.661921     758 litert_lm_loader.cc:190] model_type: tf_lite_end_of_vision
I0000 00:00:1775483829.661932     758 litert_lm_loader.cc:209] section_index: 9
I0000 00:00:1775483829.661969     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661971     758 litert_lm_loader.cc:212] section_begin_offset: 1720451072
I0000 00:00:1775483829.661973     758 litert_lm_loader.cc:213] section_end_offset: 1720457844
I0000 00:00:1775483829.661975     758 litert_lm_loader.cc:190] model_type: tf_lite_prefill_decode
I0000 00:00:1775483829.661986     758 litert_lm_loader.cc:209] section_index: 10
I0000 00:00:1775483829.661989     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.661990     758 litert_lm_loader.cc:212] section_begin_offset: 1720467456
I0000 00:00:1775483829.661992     758 litert_lm_loader.cc:213] section_end_offset: 2538742640
I0000 00:00:1775483829.661995     758 litert_lm_loader.cc:190] model_type: tf_lite_mtp_drafter
I0000 00:00:1775483829.661998     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483829.662009     758 litert_lm_loader.cc:209] section_index: 11
I0000 00:00:1775483829.662019     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483829.662023     758 litert_lm_loader.cc:212] section_begin_offset: 2538749952
I0000 00:00:1775483829.662027     758 litert_lm_loader.cc:213] section_end_offset: 2583082648
I0000 00:00:1775483829.662482     758 engine_impl.cc:306] New model files have LlmModelType, loading tokenizer asynchronously
W0000 00:00:1775483829.662555     758 litert_lm_loader.h:144] TFLite model type: TF_LITE_PREFILL_DECODE not found for backend constraints. Skipping.
W0000 00:00:1775483829.662843     758 litert_lm_loader.h:144] TFLite model type: TF_LITE_VISION_ENCODER not found for backend constraints. Skipping.
I0000 00:00:1775483829.662853     758 engine_settings.cc:97] The Main backend constraint is not set.
I0000 00:00:1775483829.662866     758 engine_settings.cc:97] The Vision backend constraint is not set.
I0000 00:00:1775483829.662880     758 engine_settings.cc:94] The Audio backend constraint is matched: CPU
I0000 00:00:1775483829.662892     758 engine_settings.cc:337] The validated engine settings: EngineSettings:
  MainExecutorSettings: backend: GPU
backend_config:
max_top_k: 1

max_tokens: 4096
activation_data_type: Not set
max_num_images: 0
lora_rank: 0
cache_dir:
cache_file: Not set
litert_dispatch_lib_dir: Not set
model_assets: model_path: /home/nemisis/.cache/huggingface/hub/models--litert-community--gemma-4-E2B-it-litert-lm/snapshots/616f4124e6ff216292f16e7f73ff33b5ba9a4dd4/gemma-4-E2B-it.litertlm
fake_weights_mode: FAKE_WEIGHTS_NONE

advanced_settings: prefill_batch_sizes: []
num_output_candidates: 1
configure_magic_numbers: true
verify_magic_numbers: false
clear_kv_cache_before_prefill: true
num_logits_to_print_after_decode: 0
gpu_madvise_original_shared_tensors: true
is_benchmark: false
preferred_device_substr:
num_threads_to_upload: -1
num_threads_to_compile: -1
convert_weights_on_gpu: true
wait_for_weights_conversion_complete_in_benchmark: true
optimize_shader_compilation: true
cache_compiled_shaders_only: false
share_constant_tensors: true
sampler_handles_input: true
allow_src_quantized_fc_conv_ops: true
hint_waiting_for_completion: false
gpu_context_low_priority: false
enable_speculative_decoding: false
disable_delegate_clustering: true

  LlmMetadata: goo.gle/debugproto
start_token {
  token_ids {
    ids: 2
  }
}
stop_tokens {
  token_ids {
    ids: 1
  }
}
stop_tokens {
  token_ids {
    ids: 50
  }
}
stop_tokens {
  token_ids {
    ids: 106
  }
}
sampler_params {
  type: TOP_P
  k: 1
  p: 0.95
  temperature: 1
  seed: 0
}
llm_model_type {
  gemma4 {
    start_of_image_token {
      token_str: "<|image>"
    }
    end_of_image_token {
      token_str: "<image|>"
    }
    start_of_audio_token {
      token_str: "<|audio>"
    }
    end_of_audio_token {
      token_str: "<audio|>"
    }
    code_fence_start: "<|tool_call>"
    code_fence_end: "<tool_call|>"
    open_quote: "<|\"|>"
    close_quote: "<|\"|>"
    function_response_start: "<|tool_response>"
    use_template_for_fc_format: true
    patch_width: 16
    patch_height: 16
    max_num_patches: 2520
  }
}
jinja_prompt_template: "{%- macro format_parameters(properties, required) -%}\n    {%- set standard_keys = [\'description\', \'type\', \'properties\', \'required\', \'nullable\'] -%}\n    {%- set ns = namespace(found_first=false) -%}\n    {%- for key, value in properties | dictsort -%}\n        {%- set add_comma = false -%}\n        {%- if key not in standard_keys -%}\n            {%- if ns.found_first %},{% endif -%}\n            {%- set ns.found_first = true -%}\n            {{ key }}:{\n            {%- if value[\'description\'] -%}\n                description:<|\"|>{{ value[\'description\'] }}<|\"|>\n                {%- set add_comma = true -%}\n            {%- endif -%}\n            {%- if value[\'nullable\'] %}\n                {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}\n                nullable:true\n            {%- endif -%}\n            {%- if value[\'type\'] | upper == \'STRING\' -%}\n                {%- if value[\'enum\'] -%}\n                    {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}\n                    enum:{{ format_argument(value[\'enum\']) }}\n                {%- endif -%}\n            {%- elif value[\'type\'] | upper == \'OBJECT\' -%}\n                ,properties:{\n                {%- if value[\'properties\'] is defined and value[\'properties\'] is mapping -%}\n                    {{- format_parameters(value[\'properties\'], value[\'required\'] | default([])) -}}\n                {%- elif value is mapping -%}\n                    {{- format_parameters(value, value[\'required\'] | default([])) -}}\n                {%- endif -%}\n                }\n                {%- if value[\'required\'] -%}\n                    ,required:[\n                    {%- for item in value[\'required\'] | default([]) -%}\n                        <|\"|>{{- item -}}<|\"|>\n                        {%- if not loop.last %},{% endif -%}\n                    {%- endfor -%}\n                    ]\n                {%- endif -%}\n            {%- elif value[\'type\'] | upper == \'ARRAY\' -%}\n                {%- if value[\'items\'] is mapping and value[\'items\'] -%}\n                    ,items:{\n                    {%- set ns_items = namespace(found_first=false) -%}\n                    {%- for item_key, item_value in value[\'items\'] | dictsort -%}\n                        {%- if item_value is not none -%}\n                            {%- if ns_items.found_first %},{% endif -%}\n                            {%- set ns_items.found_first = true -%}\n                            {%- if item_key == \'properties\' -%}\n                                properties:{\n                                {%- if item_value is mapping -%}\n                                    {{- format_parameters(item_value, value[\'items\'][\'required\'] | default([])) -}}\n                                {%- endif -%}\n                                }\n                            {%- elif item_key == \'required\' -%}\n                                required:[\n                                {%- for req_item in item_value -%}\n                                    <|\"|>{{- req_item -}}<|\"|>\n                                    {%- if not loop.last %},{% endif -%}\n                                {%- endfor -%}\n                                ]\n                            {%- elif item_key == \'type\' -%}\n                                {%- if item_value is string -%}\n                                    type:{{ format_argument(item_value | upper) }}\n                                {%- else -%}\n                                    type:{{ format_argument(item_value | map(\'upper\') | list) }}\n                                {%- endif -%}\n                            {%- else -%}\n                                {{ item_key }}:{{ format_argument(item_value) }}\n                            {%- endif -%}\n                        {%- endif -%}\n                    {%- endfor -%}\n                    }\n                {%- endif -%}\n            {%- endif -%}\n            {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}\n            type:<|\"|>{{ value[\'type\'] | upper }}<|\"|>}\n        {%- endif -%}\n    {%- endfor -%}\n{%- endmacro -%}\n{%- macro format_function_declaration(tool_data) -%}\n    declaration:{{- tool_data[\'function\'][\'name\'] -}}{description:<|\"|>{{- tool_data[\'function\'][\'description\'] -}}<|\"|>\n    {%- set params = tool_data[\'function\'][\'parameters\'] -%}\n    {%- if params -%}\n        ,parameters:{\n        {%- if params[\'properties\'] -%}\n            properties:{ {{- format_parameters(params[\'properties\'], params[\'required\']) -}} },\n        {%- endif -%}\n        {%- if params[\'required\'] -%}\n            required:[\n            {%- for item in params[\'required\'] -%}\n                <|\"|>{{- item -}}<|\"|>\n                {{- \',\' if not loop.last -}}\n            {%- endfor -%}\n            ],\n        {%- endif -%}\n        {%- if params[\'type\'] -%}\n            type:<|\"|>{{- params[\'type\'] | upper -}}<|\"|>}\n        {%- endif -%}\n    {%- endif -%}\n    {%- if \'response\' in tool_data[\'function\'] -%}\n        {%- set response_declaration = tool_data[\'function\'][\'response\'] -%}\n        ,response:{\n        {%- if response_declaration[\'description\'] -%}\n            description:<|\"|>{{- response_declaration[\'description\'] -}}<|\"|>,\n        {%- endif -%}\n        {%- if response_declaration[\'type\'] | upper == \'OBJECT\' -%}\n            type:<|\"|>{{- response_declaration[\'type\'] | upper -}}<|\"|>}\n        {%- endif -%}\n    {%- endif -%}\n    }\n{%- endmacro -%}\n{%- macro format_argument(argument, escape_keys=True) -%}\n    {%- if argument is string -%}\n        {{- \'<|\"|>\' + argument + \'<|\"|>\' -}}\n    {%- elif argument is boolean -%}\n        {{- \'true\' if argument else \'false\' -}}\n    {%- elif argument is mapping -%}\n        {{- \'{\' -}}\n        {%- set ns = namespace(found_first=false) -%}\n        {%- for key, value in argument | dictsort -%}\n            {%- if ns.found_first %},{% endif -%}\n            {%- set ns.found_first = true -%}\n            {%- if escape_keys -%}\n                {{- \'<|\"|>\' + key + \'<|\"|>\' -}}\n            {%- else -%}\n                {{- key -}}\n            {%- endif -%}\n            :{{- format_argument(value, escape_keys=escape_keys) -}}\n        {%- endfor -%}\n        {{- \'}\' -}}\n    {%- elif argument is sequence -%}\n        {{- \'[\' -}}\n        {%- for item in argument -%}\n            {{- format_argument(item, escape_keys=escape_keys) -}}\n            {%- if not loop.last %},{% endif -%}\n        {%- endfor -%}\n        {{- \']\' -}}\n    {%- else -%}\n        {{- argument -}}\n    {%- endif -%}\n{%- endmacro -%}\n{%- macro strip_thinking(text) -%}\n    {%- set ns = namespace(result=\'\') -%}\n    {%- for part in text.split(\'<channel|>\') -%}\n        {%- if \'<|channel>\' in part -%}\n            {%- set ns.result = ns.result + part.split(\'<|channel>\')[0] -%}\n        {%- else -%}\n            {%- set ns.result = ns.result + part -%}\n        {%- endif -%}\n    {%- endfor -%}\n    {{- ns.result | trim -}}\n{%- endmacro -%}\n\n{%- set ns = namespace(prev_message_type=None) -%}\n{%- set loop_messages = messages -%}\n{{ bos_token }}\n{#- Handle System/Tool Definitions Block -#}\n{%- if (enable_thinking is defined and enable_thinking) or tools or messages[0][\'role\'] in [\'system\', \'developer\'] -%}\n    {{- \'<|turn>system\\n\' -}}\n\n    {#- Inject Thinking token at the very top of the FIRST system turn -#}\n    {%- if enable_thinking is defined and enable_thinking -%}\n        {{- \'<|think|>\' -}}\n    {%- endif -%}\n\n    {%- if messages[0][\'role\'] in [\'system\', \'developer\'] -%}\n        {%- if messages[0][\'content\'] is string -%}\n            {{- messages[0][\'content\'] | trim -}}\n        {%- elif messages[0][\'content\'] is sequence -%}\n            {%- for item in messages[0][\'content\'] -%}\n                {%- if item[\'type\'] == \'text\' -%}\n                    {{- item[\'text\'] | trim -}}\n                {%- endif -%}\n            {%- endfor -%}\n        {%- endif -%}\n        {%- set loop_messages = messages[1:] -%}\n    {%- endif -%}\n\n    {%- if tools -%}\n        {{- \'\\n\\n\' -}}\n        {%- for tool in tools %}\n            {{- \'<|tool>\' -}}\n            {{- format_function_declaration(tool) | trim -}}\n            {{- \'<tool|>\' -}}\n        {%- endfor %}\n    {%- endif -%}\n\n    {{- \'<turn|>\\n\' -}}\n{%- endif %}\n\n{#- Loop through messages -#}\n{%- for message in loop_messages -%}\n    {%- set role = \'model\' if message[\'role\'] == \'assistant\' else message[\'role\'] -%}\n        {%- if role != \'tool\' -%}\n            {{- \'<|turn>\' + role + \'\\n\' }}\n        {%- endif -%}\n\n            {%- if message[\'tool_calls\'] -%}\n                {%- for tool_call in message[\'tool_calls\'] -%}\n                    {%- set function = tool_call[\'function\'] -%}\n                    {{- \'<|tool_call>call:\' + function[\'name\'] + \'{\' -}}\n                    {%- if function[\'arguments\'] is mapping -%}\n                        {%- set ns_args = namespace(found_first=false) -%}\n                        {%- for key, value in function[\'arguments\'] | dictsort -%}\n                            {%- if ns_args.found_first %},{% endif -%}\n                            {%- set ns_args.found_first = true -%}\n                            {{- key -}}:{{- format_argument(value, escape_keys=False) -}}\n                        {%- endfor -%}\n                    {%- elif function[\'arguments\'] is string -%}\n                        {{- function[\'arguments\'] -}}\n                    {%- endif -%}\n                    {{- \'}<tool_call|>\' -}}\n                {%- endfor -%}\n                {%- set ns.prev_message_type = \'tool_call\' -%}\n            {%- endif -%}\n\n            {%- if role == \'tool\' and message[\'content\'] is sequence -%}\n                {#- Tool Response handling -#}\n                {%- for item in message[\'content\'] -%}\n                    {{- \'<|tool_response>\' -}}\n                    {%- if item[\'response\'] is mapping -%}\n                        {{- \'response:\' + item[\'name\'] | default(\'unknown\') + \'{\' -}}\n                        {%- for key, value in item[\'response\'] | dictsort -%}\n                            {{- key -}}:{{- format_argument(value, escape_keys=False) -}}\n                            {%- if not loop.last %},{% endif -%}\n                        {%- endfor -%}\n                        {{- \'}\' -}}\n                    {%- else -%}\n                        {{- \'response:\' + item[\'name\'] | default(\'unknown\') + \'{value:\' + format_argument(item[\'response\'], escape_keys=False) + \'}\' -}}\n                    {%- endif -%}\n                    {{- \'<tool_response|>\' -}}\n                {%- endfor -%}\n                {%- set ns.prev_message_type = \'tool_response\' -%}\n            {%- else -%}\n                {%- if message[\'content\'] is string -%}\n                    {%- if role == \'model\' -%}\n                        {{- strip_thinking(message[\'content\']) -}}\n                    {%- else -%}\n                        {{- message[\'content\'] | trim -}}\n                    {%- endif -%}\n                {%- elif message[\'content\'] is sequence -%}\n                    {%- for item in message[\'content\'] -%}\n                        {%- if item[\'type\'] == \'text\' -%}\n                            {%- if role == \'model\' -%}\n                                {{- strip_thinking(item[\'text\']) -}}\n                            {%- else -%}\n                                {{- item[\'text\'] | trim -}}\n                            {%- endif -%}\n                        {%- elif item[\'type\'] == \'image\' -%}\n                            {{- \'\\n\\n<|image|>\\n\\n\' -}}\n                        {%- elif item[\'type\'] == \'audio\' -%}\n                            {{- \'<|audio|>\' -}}\n                        {%- endif -%}\n                    {%- endfor -%}\n                {%- endif -%}\n                {%- set ns.prev_message_type = None -%} \n            {%- endif -%}\n        {%- if ns.prev_message_type == None -%}\n            {{- \'<turn|>\\n\' -}}\n        {%- endif -%}\n{%- endfor -%}\n\n{%- if add_generation_prompt -%}\n    {%- if ns.prev_message_type != \'tool_response\' -%}\n        {{- \'<|turn>model\\n\' -}}\n    {%- endif -%}\n{%- endif -%}"
channels {
  channel_name: "thought"
  start: "<|channel>thought\n"
  end: "<channel|>"
}
  BenchmarkParams: Not set
  VisionExecutorSettings: VisionExecutorSettings:
  ModelAssets: model_path: /home/nemisis/.cache/huggingface/hub/models--litert-community--gemma-4-E2B-it
I0000 00:00:1775483829.667374     758 model_resources_litert_lm.cc:67] model_type: TF_LITE_PREFILL_DECODE
I0000 00:00:1775483829.667398     758 model_resources_litert_lm.cc:68] litert model size: 818275184
INFO: [environment.cc:30] Creating LiteRT environment with options
WARNING: [auto_registration.cc:192] NPU accelerator could not be loaded and registered: kLiteRtStatusErrorInvalidArgument.
INFO: [auto_registration.cc:279] Loading GPU accelerator(libLiteRtGpuAccelerator.so).
INFO: [auto_registration.cc:279] Loading GPU accelerator(libLiteRtWebGpuAccelerator.so).
INFO: [accelerator_registry.cc:54] RegisterAccelerator: ptr=0x7786ad011fc0, name=GPU WebGPU
INFO: [auto_registration.cc:287] Dynamically loaded GPU accelerator(libLiteRtWebGpuAccelerator.so) registered.
INFO: [accelerator_registry.cc:54] RegisterAccelerator: ptr=0x7786accabec0, name=CpuAccelerator
INFO: [auto_registration.cc:325] CPU accelerator registered.
I0000 00:00:1775483829.967055     758 llm_executor_settings_utils.cc:137] Setting serialization dir: /home/nemisis/.cache/huggingface/hub/models--litert-community--gemma-4-E2B-it-litert-lm/snapshots/616f4124e6ff216292f16e7f73ff33b5ba9a4dd4
INFO: [magic_number_utils.cc:97] Loaded: num_subgraphs=976, num_signatures=4
INFO: [magic_number_utils.cc:105]   signature=decode, subgraph_index=0, num_tensors=2703, num_inputs=35, num_outputs=32, num_ops=2068
INFO: [magic_number_utils.cc:105]   signature=prefill_1024, subgraph_index=1, num_tensors=1454, num_inputs=35, num_outputs=30, num_ops=1107
INFO: [magic_number_utils.cc:105]   signature=prefill_128, subgraph_index=2, num_tensors=1454, num_inputs=35, num_outputs=30, num_ops=1107
INFO: [magic_number_utils.cc:105]   signature=verify, subgraph_index=3, num_tensors=2887, num_inputs=35, num_outputs=32, num_ops=2243
INFO: [magic_number_utils.cc:109] Magic number configs: num_configs=1
INFO: [magic_number_utils.cc:116]   config[0]: magic_number=32003, target_number=4096, signature_prefix=null
INFO: [magic_number_utils.cc:425] 439 tensors of signature decode have been updated for magic number  32003 to target number 4096
INFO: [magic_number_utils.cc:425] 271 tensors of signature prefill_1024 have been updated for magic number  32003 to target number 4096
INFO: [magic_number_utils.cc:425] 270 tensors of signature prefill_128 have been updated for magic number  32003 to target number 4096
INFO: [magic_number_utils.cc:425] 444 tensors of signature verify have been updated for magic number  32003 to target number 4096
INFO: [compiled_model.cc:719] Flatbuffer model initialized directly from incoming litert model.
WARNING: Logging before InitGoogle() is written to STDERR
I0000 00:00:1775483830.047934     758 delegate_webgpu.cc:211] Create WebGPU environment with device substr:
WARNING: dzn is not a conformant Vulkan implementation, testing use only.
WARNING: dzn is not a conformant Vulkan implementation, testing use only.
Warning: Vulkan fullDrawIndexUint32 feature required.
 - While initializing adapter (backend=BackendType::Vulkan)
    at InitializeImpl (third_party/dawn/src/dawn/native/vulkan/PhysicalDeviceVk.cpp:253)

Warning: maxDynamicUniformBuffersPerPipelineLayout artificially reduced from 1000000 to 16 to fit dynamic offset allocation limit.
Warning: maxDynamicStorageBuffersPerPipelineLayout artificially reduced from 1000000 to 16 to fit dynamic offset allocation limit.
I0000 00:00:1775483832.253381     758 environment.cc:521] Found 1 adapters
I0000 00:00:1775483832.253420     758 environment.cc:534] adapter: llvmpipe (LLVM 15.0.7, 256 bits), arch=software, vendor=mesa, backend=Vulkan, adapterType=CPU / Software
I0000 00:00:1775483832.253473     758 environment.cc:556] Selected adapter: llvmpipe (LLVM 15.0.7, 256 bits), arch=software, vendor=mesa, backend=Vulkan, adapterType=CPU / Software
I0000 00:00:1775483832.307452     758 delegate_webgpu.cc:238] Created a WebGPU environment.
INFO: [environment.cc:41] Adding options to the existing LiteRT environment
INFO: [gpu_environment.cc:364] Failed to create OpenCL context.
INFO: [gpu_environment.h:152] Created LiteRT GpuEnvironment.
INFO: [environment.cc:41] Adding options to the existing LiteRT environment
I0000 00:00:1775483832.308061     758 delegate_webgpu.cc:632] # of threads to upload weights = 2
I0000 00:00:1775483832.308200     758 delegate_webgpu.cc:640] # of threads to compile kernels = 1
I0000 00:00:1775483832.388808     758 delegate_kernel.cc:279] Total 32 external tensors are used for delegate inputs and outputs
I0000 00:00:1775483832.388848     758 delegate_kernel.cc:716] Initializing WebGPU-based API from serialized data.
I0000 00:00:1775483832.633295     758 delegate_kernel.cc:616] Initialized InferenceContext from serialized data.
I0000 00:00:1775483832.645137     758 delegate_kernel.cc:279] Total 31 external tensors are used for delegate inputs and outputs
I0000 00:00:1775483832.645178     758 delegate_kernel.cc:716] Initializing WebGPU-based API from serialized data.
I0000 00:00:1775483832.756648     758 delegate_kernel.cc:616] Initialized InferenceContext from serialized data.
I0000 00:00:1775483832.765489     758 delegate_kernel.cc:279] Total 31 external tensors are used for delegate inputs and outputs
I0000 00:00:1775483832.765531     758 delegate_kernel.cc:716] Initializing WebGPU-based API from serialized data.
I0000 00:00:1775483832.839186     758 delegate_kernel.cc:616] Initialized InferenceContext from serialized data.
I0000 00:00:1775483832.857003     758 delegate_kernel.cc:279] Total 32 external tensors are used for delegate inputs and outputs
I0000 00:00:1775483832.857051     758 delegate_kernel.cc:716] Initializing WebGPU-based API from serialized data.
I0000 00:00:1775483833.001031     758 delegate_kernel.cc:616] Initialized InferenceContext from serialized data.
INFO: [environment.cc:30] Creating LiteRT environment with options
WARNING: [auto_registration.cc:192] NPU accelerator could not be loaded and registered: kLiteRtStatusErrorInvalidArgument.
INFO: [auto_registration.cc:279] Loading GPU accelerator(libLiteRtGpuAccelerator.so).
INFO: [auto_registration.cc:279] Loading GPU accelerator(libLiteRtWebGpuAccelerator.so).
INFO: [accelerator_registry.cc:54] RegisterAccelerator: ptr=0x5784a83d7a90, name=GPU WebGPU
INFO: [auto_registration.cc:287] Dynamically loaded GPU accelerator(libLiteRtWebGpuAccelerator.so) registered.
INFO: [accelerator_registry.cc:54] RegisterAccelerator: ptr=0x5784f0001330, name=CpuAccelerator
INFO: [auto_registration.cc:325] CPU accelerator registered.
I0000 00:00:1775483833.044445     758 model_resources_litert_lm.cc:67] model_type: TF_LITE_END_OF_AUDIO
I0000 00:00:1775483833.044544     758 model_resources_litert_lm.cc:68] litert model size: 6772
I0000 00:00:1775483833.044822     758 model_resources_litert_lm.cc:67] model_type: TF_LITE_END_OF_VISION
I0000 00:00:1775483833.044845     758 model_resources_litert_lm.cc:68] litert model size: 6772
I0000 00:00:1775483833.045567     758 model_resources_litert_lm.cc:67] model_type: TF_LITE_EMBEDDER
I0000 00:00:1775483833.045591     758 model_resources_litert_lm.cc:68] litert model size: 103811720
INFO: [magic_number_utils.cc:97] Loaded: num_subgraphs=1, num_signatures=1
INFO: [magic_number_utils.cc:105]   signature=embedder, subgraph_index=0, num_tensors=16, num_inputs=1, num_outputs=1, num_ops=8
INFO: [magic_number_utils.cc:109] Magic number configs: num_configs=1
INFO: [magic_number_utils.cc:116]   config[0]: magic_number=32003, target_number=4096, signature_prefix=null
INFO: [compiled_model.cc:719] Flatbuffer model initialized directly from incoming litert model.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
I0000 00:00:1775483833.063724     758 embedding_lookup_text.cc:345] EmbeddingLookupText initialized: signature=embedder, rank=3, floats_per_token=1536
INFO: [magic_number_utils.cc:97] Loaded: num_subgraphs=1, num_signatures=1
INFO: [magic_number_utils.cc:105]   signature=eoi, subgraph_index=0, num_tensors=1, num_inputs=0, num_outputs=1, num_ops=0
INFO: [magic_number_utils.cc:109] Magic number configs: num_configs=1
INFO: [magic_number_utils.cc:116]   config[0]: magic_number=32003, target_number=4096, signature_prefix=null
INFO: [compiled_model.cc:719] Flatbuffer model initialized directly from incoming litert model.
INFO: [compiled_model.cc:1486] Tracked constant output tensor eoi_embedding with locked address
INFO: [magic_number_utils.cc:97] Loaded: num_subgraphs=1, num_signatures=1
INFO: [magic_number_utils.cc:105]   signature=eoa, subgraph_index=0, num_tensors=1, num_inputs=0, num_outputs=1, num_ops=0
INFO: [magic_number_utils.cc:109] Magic number configs: num_configs=1
INFO: [magic_number_utils.cc:116]   config[0]: magic_number=32003, target_number=4096, signature_prefix=null
INFO: [compiled_model.cc:719] Flatbuffer model initialized directly from incoming litert model.
INFO: [compiled_model.cc:1486] Tracked constant output tensor eoa_embedding with locked address
I0000 00:00:1775483833.070814     758 model_resources_litert_lm.cc:67] model_type: TF_LITE_PER_LAYER_EMBEDDER
I0000 00:00:1775483833.070847     758 model_resources_litert_lm.cc:68] litert model size: 1284518392
INFO: [magic_number_utils.cc:97] Loaded: num_subgraphs=1, num_signatures=1
INFO: [magic_number_utils.cc:105]   signature=per_layer_embedder, subgraph_index=0, num_tensors=83, num_inputs=1, num_outputs=1, num_ops=42
INFO: [magic_number_utils.cc:109] Magic number configs: num_configs=1
INFO: [magic_number_utils.cc:116]   config[0]: magic_number=32003, target_number=4096, signature_prefix=null
INFO: [compiled_model.cc:719] Flatbuffer model initialized directly from incoming litert model.
I0000 00:00:1775483833.314252     758 embedding_lookup_text.cc:345] EmbeddingLookupText initialized: signature=per_layer_embedder, rank=4, floats_per_token=8960
I0000 00:00:1775483833.314397     758 litert_lm_loader.cc:126] LitertLmLoader::Initialize
I0000 00:00:1775483833.314454     758 litert_lm_loader.cc:149] mmap_status is ok
I0000 00:00:1775483833.314472     758 litert_lm_loader.cc:155] status: OK
I0000 00:00:1775483833.314474     758 litert_lm_loader.cc:156] major_version: 1
I0000 00:00:1775483833.314477     758 litert_lm_loader.cc:157] minor_version: 5
I0000 00:00:1775483833.314478     758 litert_lm_loader.cc:158] patch_version: 0
I0000 00:00:1775483833.314480     758 litert_lm_loader.cc:209] section_index: 0
I0000 00:00:1775483833.314481     758 litert_lm_loader.cc:210] section_data_type: LlmMetadataProto
I0000 00:00:1775483833.314483     758 litert_lm_loader.cc:212] section_begin_offset: 16384
I0000 00:00:1775483833.314485     758 litert_lm_loader.cc:213] section_end_offset: 28576
I0000 00:00:1775483833.314486     758 litert_lm_loader.cc:209] section_index: 1
I0000 00:00:1775483833.314487     758 litert_lm_loader.cc:210] section_data_type: SP_Tokenizer
I0000 00:00:1775483833.314488     758 litert_lm_loader.cc:212] section_begin_offset: 32768
I0000 00:00:1775483833.314489     758 litert_lm_loader.cc:213] section_end_offset: 4721781
I0000 00:00:1775483833.314491     758 litert_lm_loader.cc:190] model_type: tf_lite_embedder
I0000 00:00:1775483833.314494     758 litert_lm_loader.cc:209] section_index: 2
I0000 00:00:1775483833.314495     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314496     758 litert_lm_loader.cc:212] section_begin_offset: 4734976
I0000 00:00:1775483833.314497     758 litert_lm_loader.cc:213] section_end_offset: 108546696
I0000 00:00:1775483833.314499     758 litert_lm_loader.cc:190] model_type: tf_lite_per_layer_embedder
I0000 00:00:1775483833.314501     758 litert_lm_loader.cc:209] section_index: 3
I0000 00:00:1775483833.314502     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314503     758 litert_lm_loader.cc:212] section_begin_offset: 108560384
I0000 00:00:1775483833.314504     758 litert_lm_loader.cc:213] section_end_offset: 1393078776
I0000 00:00:1775483833.314505     758 litert_lm_loader.cc:190] model_type: tf_lite_audio_encoder_hw
I0000 00:00:1775483833.314507     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483833.314508     758 litert_lm_loader.cc:209] section_index: 4
I0000 00:00:1775483833.314509     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314510     758 litert_lm_loader.cc:212] section_begin_offset: 1393082368
I0000 00:00:1775483833.314512     758 litert_lm_loader.cc:213] section_end_offset: 1487134648
I0000 00:00:1775483833.314513     758 litert_lm_loader.cc:190] model_type: tf_lite_audio_adapter
I0000 00:00:1775483833.314514     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483833.314515     758 litert_lm_loader.cc:209] section_index: 5
I0000 00:00:1775483833.314516     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314518     758 litert_lm_loader.cc:212] section_begin_offset: 1487142912
I0000 00:00:1775483833.314519     758 litert_lm_loader.cc:213] section_end_offset: 1496584156
I0000 00:00:1775483833.314520     758 litert_lm_loader.cc:190] model_type: tf_lite_end_of_audio
I0000 00:00:1775483833.314521     758 litert_lm_loader.cc:209] section_index: 6
I0000 00:00:1775483833.314522     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314523     758 litert_lm_loader.cc:212] section_begin_offset: 1496596480
I0000 00:00:1775483833.314524     758 litert_lm_loader.cc:213] section_end_offset: 1496603252
I0000 00:00:1775483833.314536     758 litert_lm_loader.cc:190] model_type: tf_lite_vision_encoder
I0000 00:00:1775483833.314539     758 litert_lm_loader.cc:209] section_index: 7
I0000 00:00:1775483833.314541     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314542     758 litert_lm_loader.cc:212] section_begin_offset: 1496612864
I0000 00:00:1775483833.314543     758 litert_lm_loader.cc:213] section_end_offset: 1715702984
I0000 00:00:1775483833.314545     758 litert_lm_loader.cc:190] model_type: tf_lite_vision_adapter
I0000 00:00:1775483833.314546     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483833.314547     758 litert_lm_loader.cc:209] section_index: 8
I0000 00:00:1775483833.314549     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314550     758 litert_lm_loader.cc:212] section_begin_offset: 1715716096
I0000 00:00:1775483833.314551     758 litert_lm_loader.cc:213] section_end_offset: 1720443208
I0000 00:00:1775483833.314552     758 litert_lm_loader.cc:190] model_type: tf_lite_end_of_vision
I0000 00:00:1775483833.314553     758 litert_lm_loader.cc:209] section_index: 9
I0000 00:00:1775483833.314555     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314556     758 litert_lm_loader.cc:212] section_begin_offset: 1720451072
I0000 00:00:1775483833.314557     758 litert_lm_loader.cc:213] section_end_offset: 1720457844
I0000 00:00:1775483833.314558     758 litert_lm_loader.cc:190] model_type: tf_lite_prefill_decode
I0000 00:00:1775483833.314559     758 litert_lm_loader.cc:209] section_index: 10
I0000 00:00:1775483833.314560     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314561     758 litert_lm_loader.cc:212] section_begin_offset: 1720467456
I0000 00:00:1775483833.314562     758 litert_lm_loader.cc:213] section_end_offset: 2538742640
I0000 00:00:1775483833.314563     758 litert_lm_loader.cc:190] model_type: tf_lite_mtp_drafter
I0000 00:00:1775483833.314565     758 litert_lm_loader.cc:203] section_backend_constraint: cpu
I0000 00:00:1775483833.314567     758 litert_lm_loader.cc:209] section_index: 11
I0000 00:00:1775483833.314568     758 litert_lm_loader.cc:210] section_data_type: TFLiteModel
I0000 00:00:1775483833.314569     758 litert_lm_loader.cc:212] section_begin_offset: 2538749952
I0000 00:00:1775483833.314570     758 litert_lm_loader.cc:213] section_end_offset: 2583082648
I0000 00:00:1775483833.315671     758 model_resources_litert_lm.cc:67] model_type: TF_LITE_VISION_ENCODER
I0000 00:00:1775483833.315706     758 model_resources_litert_lm.cc:68] litert model size: 219090120
I0000 00:00:1775483833.389173     758 model_resources_litert_lm.cc:67] model_type: TF_LITE_VISION_ADAPTER
I0000 00:00:1775483833.389222     758 model_resources_litert_lm.cc:68] litert model size: 4727112
INFO: [magic_number_utils.cc:97] Loaded: num_subgraphs=1, num_signatures=1
INFO: [magic_number_utils.cc:105]   signature=vision_280, subgraph_index=0, num_tensors=2502, num_inputs=2, num_outputs=2, num_ops=2245
INFO: [magic_number_utils.cc:109] Magic number configs: num_configs=1
INFO: [magic_number_utils.cc:116]   config[0]: magic_number=32003, target_number=4096, signature_prefix=null
INFO: [compiled_model.cc:719] Flatbuffer model initialized directly from incoming litert model.
INFO: [environment.cc:41] Adding options to the existing LiteRT environment
I0000 00:00:1775483833.395941     758 delegate_webgpu.cc:632] # of threads to upload weights = 0
I0000 00:00:1775483833.396008     758 delegate_webgpu.cc:640] # of threads to compile kernels = 0
I0000 00:00:1775483835.880817     758 delegate_kernel.cc:716] Initializing WebGPU-based API from serialized data.
E0000 00:00:1775483835.881750     758 delegate_webgpu.cc:370] Failed to create litert::ml_drift::DelegateKernelLiteRt: RESOURCE_EXHAUSTED: Buffer with size - 304819200 bytes can not be created. Max buffer size for this GPU - 134217728 bytes. Shape - {bhwdc, {12, 1, 2520, 1, 2520}}, data type - float32.
=== Source Location Trace: ===
third_party/ml_drift/common/task/tensor_desc.cc:1854
third_party/ml_drift/common/gpu_model_util.cc:232
third_party/ml_drift/common/gpu_model_util.cc:269
third_party/ml_drift/common/gpu_model_util.cc:432
third_party/odml/litert/ml_drift/delegate/delegate_kernel.cc:697
third_party/odml/litert/ml_drift/delegate/delegate_kernel.cc:627
third_party/odml/litert/ml_drift/delegate/delegate_kernel.cc:719
third_party/odml/litert/ml_drift/delegate/delegate_kernel.cc:284
third_party/odml/litert/ml_drift/delegate/delegate_kernel_litert.cc:158
ERROR: Failed to initialize kernel.
ERROR: Restored original execution plan after delegate application failure.
ERROR:    Traceback (most recent call last):
  File "/mnt/e/sandbox/parlor/src/.venv/lib/python3.14/site-packages/starlette/routing.py", line 638, in lifespan
    async with self.lifespan_context(app) as maybe_state:
               ~~~~~~~~~~~~~~~~~~~~~^^^^^
  File "/home/nemisis/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/contextlib.py", line 214, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/sandbox/parlor/src/server.py", line 66, in lifespan
    await asyncio.get_event_loop().run_in_executor(None, load_models)
  File "/home/nemisis/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py", line 86, in run
    result = ctx.run(self.task)
  File "/home/nemisis/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/lib/python3.14/concurrent/futures/thread.py", line 73, in run
    return fn(*args, **kwargs)
  File "/mnt/e/sandbox/parlor/src/server.py", line 52, in load_models
    engine = litert_lm.Engine(
        MODEL_PATH,
    ...<2 lines>...
        audio_backend=litert_lm.Backend.CPU,
    )
RuntimeError: python/litert_lm/litert_lm.cc:496: operator(): INTERNAL: ERROR: [runtime/executor/vision_litert_compiled_model_executor.cc:188]
└ ERROR: [external/litert/litert/cc/litert_compiled_model.h:836]

ERROR:    Application startup failed. Exiting.
INFO: [accelerator_registry.cc:43] DestroyAccelerator: ptr=0x5784f0001330, name=CpuAccelerator
INFO: [accelerator_registry.cc:43] DestroyAccelerator: ptr=0x5784a83d7a90, name=GPU WebGPU
nemisis@nemisis-BLACK:/mnt/e/sandbox/parlor/src$

Any idea how to resolve this, short of having to run it in a native Linux machine?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions