YeMoKoo commited on
Commit
cad3aaa
·
verified ·
1 Parent(s): a90a801

Add four Qwen3-VL-4B GRPO adapters (UI-Genie / AndroidFlux mixes, checkpoint-150) + README section

Browse files
README.md CHANGED
@@ -1,5 +1,7 @@
1
  ---
2
- base_model: Qwen/Qwen3-VL-2B-Instruct
 
 
3
  library_name: peft
4
  pipeline_tag: image-text-to-text
5
  tags: [lora, grpo, rlhf, gui-agent, android, androidflux]
@@ -51,3 +53,21 @@ split differ. See each subfolder's `README.md` for full details.
51
 
52
  Intended comparison (run elsewhere, on held-out data):
53
  base `Qwen/Qwen3-VL-2B-Instruct` vs. scalar-GRPO vs. discrete-GRPO.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ base_model:
3
+ - Qwen/Qwen3-VL-2B-Instruct
4
+ - Qwen/Qwen3-VL-4B-Instruct
5
  library_name: peft
6
  pipeline_tag: image-text-to-text
7
  tags: [lora, grpo, rlhf, gui-agent, android, androidflux]
 
53
 
54
  Intended comparison (run elsewhere, on held-out data):
55
  base `Qwen/Qwen3-VL-2B-Instruct` vs. scalar-GRPO vs. discrete-GRPO.
56
+
57
+ ## Qwen3-VL-4B adapters (2026-09-24/25)
58
+
59
+ Four offline-GRPO LoRA adapters for **Qwen3-VL-4B-Instruct**, trained with the same recipe, reward model
60
+ (`Gyubeum/Qwen3-VL-8B-Instruct-UI-Genie-scoring-128k-balanced`, Bradley-Terry scalar + GPRS) and budget
61
+ (2,400 prompts, 150 steps); only the training-data mix differs. HV65 success rate (65 human-verified AndroidWorld tasks):
62
+
63
+ | subfolder | training data | clean | error_t | mean |
64
+ |---|---|---:|---:|---:|
65
+ | (base Qwen3-VL-4B-Instruct, no RL) | — | 20.0 | 21.5 | 20.8 |
66
+ | `grpo4b-ui100-20260924` | UI-Genie 100% | 23.1 | 16.9 | 20.0 |
67
+ | `grpo4b-t100-20260924` | AndroidFlux t 100% | 18.5 | 30.8 | 24.6 |
68
+ | `grpo4b-ui50-t25-t1-25-20260924` | UI 50 / t 25 / t-1 25 | 29.2 | 21.5 | 25.4 |
69
+ | `grpo4b-ui40-t35-t1-25-20260925` | UI 40 / t 35 / t-1 25 | 27.7 | 26.2 | 26.9 |
70
+
71
+ Load with `subfolder=` exactly as above, but with base `Qwen/Qwen3-VL-4B-Instruct` @
72
+ `ebb281ec70b05090aa6165b016eac8ec08e71b17`, and assert **504** LoRA tensors (not 392). Each subfolder's
73
+ `README.md` has the full recipe and data provenance; `trainer_state.json` has the per-step logs.
grpo4b-t100-20260924/README.md ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # grpo4b-t100-20260924
2
+
3
+ GRPO-trained LoRA adapter for **Qwen3-VL-4B-Instruct** (Android GUI agent), trained on **AndroidFlux t 100%**.
4
+ Final checkpoint (step 150 of 150, one epoch).
5
+
6
+ ## Load
7
+
8
+ ```python
9
+ import torch
10
+ from transformers import AutoModelForImageTextToText, AutoProcessor
11
+ from peft import PeftModel
12
+
13
+ BASE, REV = "Qwen/Qwen3-VL-4B-Instruct", "ebb281ec70b05090aa6165b016eac8ec08e71b17"
14
+
15
+ base = AutoModelForImageTextToText.from_pretrained(
16
+ BASE, revision=REV, dtype=torch.bfloat16, device_map="cuda")
17
+ model = PeftModel.from_pretrained(base, "YeMoKoo/AF_RL", subfolder="grpo4b-t100-20260924")
18
+ processor = AutoProcessor.from_pretrained(BASE, revision=REV)
19
+
20
+ # sanity check: must be 504, not 0
21
+ assert sum("lora" in n.lower() for n, _ in model.named_parameters()) == 504
22
+ ```
23
+
24
+ Use `AutoModelForImageTextToText`; Qwen3-VL is not a causal-LM class. `target_modules` is a regex over
25
+ `model.language_model.*`: if another `transformers` version renames modules, the adapter loads silently as a no-op,
26
+ so always assert the 504 LoRA tensors. Trained with `transformers==4.57.6`, `peft==0.19.1`, `torch==2.8.0`.
27
+
28
+ ## Training data
29
+
30
+ 2,400 AndroidFlux t prompts (2,080 unique + 320 repeated); 2,400 prompts, one epoch. Exact prompts and order: `Gyubeum/AndroidFlux_RL_Train`, `curated_set/0926-t100.json`.
31
+ AndroidFlux contexts come from the `t` / `t_minus_1` slices of `Gyubeum/AndroidFlux_RL_Train` @ `419373f6`,
32
+ keeping only rows whose goal matches their source trajectory. No rollout or reward-model filtering.
33
+
34
+ ## Training
35
+
36
+ LoRA r=64, alpha=32, dropout 0, all linear layers of the LLM (vision tower and aligner frozen). Offline GRPO
37
+ (ms-swift): 8 candidates per prompt, 16 prompts per step (batch 128), 150 steps, lr 5e-5 cosine to 0.1x,
38
+ warmup 5%, KL beta 1e-3, temperature 0.9, top-p 0.95, max completion 512 tokens.
39
+ Reward: `Gyubeum/Qwen3-VL-8B-Instruct-UI-Genie-scoring-128k-balanced` @ `4ce62423` (Bradley-Terry scalar), shaped with GPRS group win-share
40
+ (no std scaling); candidate coordinates are rescaled from the 0-1000 grid to the RM's declared screen resolution.
41
+ A `terminate` candidate gets 0 unless the context is labelled `is_next_terminate=True`.
42
+ `trainer_state.json` has the per-step logs.
43
+
44
+ ## Evaluation
45
+
46
+ HV65 (65 human-verified AndroidWorld tasks, greedy, one episode per task and condition), success rate:
47
+
48
+ | clean | error_t | mean |
49
+ |---:|---:|---:|
50
+ | 18.5% | 30.8% | 24.6% |
51
+
52
+ Base Qwen3-VL-4B-Instruct without RL: 20.0% / 21.5% / 20.8%. One seed per run.
grpo4b-t100-20260924/adapter_config.json ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "Qwen/Qwen3-VL-4B-Instruct",
7
+ "bias": "none",
8
+ "corda_config": null,
9
+ "ensure_weight_tying": false,
10
+ "eva_config": null,
11
+ "exclude_modules": null,
12
+ "fan_in_fan_out": false,
13
+ "inference_mode": true,
14
+ "init_lora_weights": true,
15
+ "layer_replication": null,
16
+ "layers_pattern": null,
17
+ "layers_to_transform": null,
18
+ "loftq_config": {},
19
+ "lora_alpha": 32,
20
+ "lora_bias": false,
21
+ "lora_dropout": 0.0,
22
+ "lora_ga_config": null,
23
+ "megatron_config": null,
24
+ "megatron_core": "megatron.core",
25
+ "modules_to_save": [],
26
+ "peft_type": "LORA",
27
+ "peft_version": "0.19.1",
28
+ "qalora_group_size": 16,
29
+ "r": 64,
30
+ "rank_pattern": {},
31
+ "revision": "ebb281ec70b05090aa6165b016eac8ec08e71b17",
32
+ "target_modules": "^(model\\.language_model(?=\\.).*\\.(v_proj|k_proj|up_proj|q_proj|o_proj|down_proj|gate_proj))$",
33
+ "target_parameters": null,
34
+ "task_type": "CAUSAL_LM",
35
+ "trainable_token_indices": null,
36
+ "use_bdlora": null,
37
+ "use_dora": false,
38
+ "use_qalora": false,
39
+ "use_rslora": false
40
+ }
grpo4b-t100-20260924/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2e2f74e9aab368f20ca35bc5f713788f5faaf56e44c7af4e8c8a09d6ca32f3f4
3
+ size 264316960
grpo4b-t100-20260924/trainer_state.json ADDED
The diff for this file is too large to render. See raw diff
 
grpo4b-ui100-20260924/README.md ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # grpo4b-ui100-20260924
2
+
3
+ GRPO-trained LoRA adapter for **Qwen3-VL-4B-Instruct** (Android GUI agent), trained on **UI-Genie 100%**.
4
+ Final checkpoint (step 150 of 150, one epoch).
5
+
6
+ ## Load
7
+
8
+ ```python
9
+ import torch
10
+ from transformers import AutoModelForImageTextToText, AutoProcessor
11
+ from peft import PeftModel
12
+
13
+ BASE, REV = "Qwen/Qwen3-VL-4B-Instruct", "ebb281ec70b05090aa6165b016eac8ec08e71b17"
14
+
15
+ base = AutoModelForImageTextToText.from_pretrained(
16
+ BASE, revision=REV, dtype=torch.bfloat16, device_map="cuda")
17
+ model = PeftModel.from_pretrained(base, "YeMoKoo/AF_RL", subfolder="grpo4b-ui100-20260924")
18
+ processor = AutoProcessor.from_pretrained(BASE, revision=REV)
19
+
20
+ # sanity check: must be 504, not 0
21
+ assert sum("lora" in n.lower() for n, _ in model.named_parameters()) == 504
22
+ ```
23
+
24
+ Use `AutoModelForImageTextToText`; Qwen3-VL is not a causal-LM class. `target_modules` is a regex over
25
+ `model.language_model.*`: if another `transformers` version renames modules, the adapter loads silently as a no-op,
26
+ so always assert the 504 LoRA tensors. Trained with `transformers==4.57.6`, `peft==0.19.1`, `torch==2.8.0`.
27
+
28
+ ## Training data
29
+
30
+ 2,400 UI-Genie prompts; 2,400 prompts, one epoch. The prompts are the first 2,400 of a seed-42 shuffle of a 12,000-prompt stratified reserve drawn from `Gyubeum/UI_Genie_128k` @ `d7987e1f`.
31
+ AndroidFlux contexts come from the `t` / `t_minus_1` slices of `Gyubeum/AndroidFlux_RL_Train` @ `419373f6`,
32
+ keeping only rows whose goal matches their source trajectory. No rollout or reward-model filtering.
33
+
34
+ ## Training
35
+
36
+ LoRA r=64, alpha=32, dropout 0, all linear layers of the LLM (vision tower and aligner frozen). Offline GRPO
37
+ (ms-swift): 8 candidates per prompt, 16 prompts per step (batch 128), 150 steps, lr 5e-5 cosine to 0.1x,
38
+ warmup 5%, KL beta 1e-3, temperature 0.9, top-p 0.95, max completion 512 tokens.
39
+ Reward: `Gyubeum/Qwen3-VL-8B-Instruct-UI-Genie-scoring-128k-balanced` @ `4ce62423` (Bradley-Terry scalar), shaped with GPRS group win-share
40
+ (no std scaling); candidate coordinates are rescaled from the 0-1000 grid to the RM's declared screen resolution.
41
+ A `terminate` candidate gets 0 unless the context is labelled `is_next_terminate=True`.
42
+ `trainer_state.json` has the per-step logs.
43
+
44
+ ## Evaluation
45
+
46
+ HV65 (65 human-verified AndroidWorld tasks, greedy, one episode per task and condition), success rate:
47
+
48
+ | clean | error_t | mean |
49
+ |---:|---:|---:|
50
+ | 23.1% | 16.9% | 20.0% |
51
+
52
+ Base Qwen3-VL-4B-Instruct without RL: 20.0% / 21.5% / 20.8%. One seed per run.
grpo4b-ui100-20260924/adapter_config.json ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "Qwen/Qwen3-VL-4B-Instruct",
7
+ "bias": "none",
8
+ "corda_config": null,
9
+ "ensure_weight_tying": false,
10
+ "eva_config": null,
11
+ "exclude_modules": null,
12
+ "fan_in_fan_out": false,
13
+ "inference_mode": true,
14
+ "init_lora_weights": true,
15
+ "layer_replication": null,
16
+ "layers_pattern": null,
17
+ "layers_to_transform": null,
18
+ "loftq_config": {},
19
+ "lora_alpha": 32,
20
+ "lora_bias": false,
21
+ "lora_dropout": 0.0,
22
+ "lora_ga_config": null,
23
+ "megatron_config": null,
24
+ "megatron_core": "megatron.core",
25
+ "modules_to_save": [],
26
+ "peft_type": "LORA",
27
+ "peft_version": "0.19.1",
28
+ "qalora_group_size": 16,
29
+ "r": 64,
30
+ "rank_pattern": {},
31
+ "revision": "ebb281ec70b05090aa6165b016eac8ec08e71b17",
32
+ "target_modules": "^(model\\.language_model(?=\\.).*\\.(k_proj|v_proj|o_proj|down_proj|up_proj|gate_proj|q_proj))$",
33
+ "target_parameters": null,
34
+ "task_type": "CAUSAL_LM",
35
+ "trainable_token_indices": null,
36
+ "use_bdlora": null,
37
+ "use_dora": false,
38
+ "use_qalora": false,
39
+ "use_rslora": false
40
+ }
grpo4b-ui100-20260924/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c49cfdffad584c9e451dea97d157ea5175dfab63bfd4f6e4bdad83913c5bf1b3
3
+ size 264316960
grpo4b-ui100-20260924/trainer_state.json ADDED
The diff for this file is too large to render. See raw diff
 
grpo4b-ui40-t35-t1-25-20260925/README.md ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # grpo4b-ui40-t35-t1-25-20260925
2
+
3
+ GRPO-trained LoRA adapter for **Qwen3-VL-4B-Instruct** (Android GUI agent), trained on **UI 40 / t 35 / t-1 25**.
4
+ Final checkpoint (step 150 of 150, one epoch).
5
+
6
+ ## Load
7
+
8
+ ```python
9
+ import torch
10
+ from transformers import AutoModelForImageTextToText, AutoProcessor
11
+ from peft import PeftModel
12
+
13
+ BASE, REV = "Qwen/Qwen3-VL-4B-Instruct", "ebb281ec70b05090aa6165b016eac8ec08e71b17"
14
+
15
+ base = AutoModelForImageTextToText.from_pretrained(
16
+ BASE, revision=REV, dtype=torch.bfloat16, device_map="cuda")
17
+ model = PeftModel.from_pretrained(base, "YeMoKoo/AF_RL", subfolder="grpo4b-ui40-t35-t1-25-20260925")
18
+ processor = AutoProcessor.from_pretrained(BASE, revision=REV)
19
+
20
+ # sanity check: must be 504, not 0
21
+ assert sum("lora" in n.lower() for n, _ in model.named_parameters()) == 504
22
+ ```
23
+
24
+ Use `AutoModelForImageTextToText`; Qwen3-VL is not a causal-LM class. `target_modules` is a regex over
25
+ `model.language_model.*`: if another `transformers` version renames modules, the adapter loads silently as a no-op,
26
+ so always assert the 504 LoRA tensors. Trained with `transformers==4.57.6`, `peft==0.19.1`, `torch==2.8.0`.
27
+
28
+ ## Training data
29
+
30
+ 960 UI-Genie + 840 AndroidFlux t + 600 AndroidFlux t-1; 2,400 prompts, one epoch. Exact prompts and order: `Gyubeum/AndroidFlux_RL_Train`, `curated_set/0926-ui40_t35_t1_25.json`.
31
+ AndroidFlux contexts come from the `t` / `t_minus_1` slices of `Gyubeum/AndroidFlux_RL_Train` @ `419373f6`,
32
+ keeping only rows whose goal matches their source trajectory. No rollout or reward-model filtering.
33
+
34
+ ## Training
35
+
36
+ LoRA r=64, alpha=32, dropout 0, all linear layers of the LLM (vision tower and aligner frozen). Offline GRPO
37
+ (ms-swift): 8 candidates per prompt, 16 prompts per step (batch 128), 150 steps, lr 5e-5 cosine to 0.1x,
38
+ warmup 5%, KL beta 1e-3, temperature 0.9, top-p 0.95, max completion 512 tokens.
39
+ Reward: `Gyubeum/Qwen3-VL-8B-Instruct-UI-Genie-scoring-128k-balanced` @ `4ce62423` (Bradley-Terry scalar), shaped with GPRS group win-share
40
+ (no std scaling); candidate coordinates are rescaled from the 0-1000 grid to the RM's declared screen resolution.
41
+ A `terminate` candidate gets 0 unless the context is labelled `is_next_terminate=True`.
42
+ `trainer_state.json` has the per-step logs.
43
+
44
+ ## Evaluation
45
+
46
+ HV65 (65 human-verified AndroidWorld tasks, greedy, one episode per task and condition), success rate:
47
+
48
+ | clean | error_t | mean |
49
+ |---:|---:|---:|
50
+ | 27.7% | 26.2% | 26.9% |
51
+
52
+ Base Qwen3-VL-4B-Instruct without RL: 20.0% / 21.5% / 20.8%. One seed per run.
grpo4b-ui40-t35-t1-25-20260925/adapter_config.json ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "Qwen/Qwen3-VL-4B-Instruct",
7
+ "bias": "none",
8
+ "corda_config": null,
9
+ "ensure_weight_tying": false,
10
+ "eva_config": null,
11
+ "exclude_modules": null,
12
+ "fan_in_fan_out": false,
13
+ "inference_mode": true,
14
+ "init_lora_weights": true,
15
+ "layer_replication": null,
16
+ "layers_pattern": null,
17
+ "layers_to_transform": null,
18
+ "loftq_config": {},
19
+ "lora_alpha": 32,
20
+ "lora_bias": false,
21
+ "lora_dropout": 0.0,
22
+ "lora_ga_config": null,
23
+ "megatron_config": null,
24
+ "megatron_core": "megatron.core",
25
+ "modules_to_save": [],
26
+ "peft_type": "LORA",
27
+ "peft_version": "0.19.1",
28
+ "qalora_group_size": 16,
29
+ "r": 64,
30
+ "rank_pattern": {},
31
+ "revision": "ebb281ec70b05090aa6165b016eac8ec08e71b17",
32
+ "target_modules": "^(model\\.language_model(?=\\.).*\\.(gate_proj|v_proj|o_proj|q_proj|up_proj|k_proj|down_proj))$",
33
+ "target_parameters": null,
34
+ "task_type": "CAUSAL_LM",
35
+ "trainable_token_indices": null,
36
+ "use_bdlora": null,
37
+ "use_dora": false,
38
+ "use_qalora": false,
39
+ "use_rslora": false
40
+ }
grpo4b-ui40-t35-t1-25-20260925/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:88f0727f571d1fc28df1455db07bb76bf8e6f334af81767d78b3f6abc51e3d2f
3
+ size 264316960
grpo4b-ui40-t35-t1-25-20260925/trainer_state.json ADDED
The diff for this file is too large to render. See raw diff
 
grpo4b-ui50-t25-t1-25-20260924/README.md ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # grpo4b-ui50-t25-t1-25-20260924
2
+
3
+ GRPO-trained LoRA adapter for **Qwen3-VL-4B-Instruct** (Android GUI agent), trained on **UI 50 / t 25 / t-1 25**.
4
+ Final checkpoint (step 150 of 150, one epoch).
5
+
6
+ ## Load
7
+
8
+ ```python
9
+ import torch
10
+ from transformers import AutoModelForImageTextToText, AutoProcessor
11
+ from peft import PeftModel
12
+
13
+ BASE, REV = "Qwen/Qwen3-VL-4B-Instruct", "ebb281ec70b05090aa6165b016eac8ec08e71b17"
14
+
15
+ base = AutoModelForImageTextToText.from_pretrained(
16
+ BASE, revision=REV, dtype=torch.bfloat16, device_map="cuda")
17
+ model = PeftModel.from_pretrained(base, "YeMoKoo/AF_RL", subfolder="grpo4b-ui50-t25-t1-25-20260924")
18
+ processor = AutoProcessor.from_pretrained(BASE, revision=REV)
19
+
20
+ # sanity check: must be 504, not 0
21
+ assert sum("lora" in n.lower() for n, _ in model.named_parameters()) == 504
22
+ ```
23
+
24
+ Use `AutoModelForImageTextToText`; Qwen3-VL is not a causal-LM class. `target_modules` is a regex over
25
+ `model.language_model.*`: if another `transformers` version renames modules, the adapter loads silently as a no-op,
26
+ so always assert the 504 LoRA tensors. Trained with `transformers==4.57.6`, `peft==0.19.1`, `torch==2.8.0`.
27
+
28
+ ## Training data
29
+
30
+ 1,200 UI-Genie + 600 AndroidFlux t + 600 AndroidFlux t-1; 2,400 prompts, one epoch. Exact prompts and order: `Gyubeum/AndroidFlux_RL_Train`, `curated_set/0926-ui50_t25_t1_25.json`.
31
+ AndroidFlux contexts come from the `t` / `t_minus_1` slices of `Gyubeum/AndroidFlux_RL_Train` @ `419373f6`,
32
+ keeping only rows whose goal matches their source trajectory. No rollout or reward-model filtering.
33
+
34
+ ## Training
35
+
36
+ LoRA r=64, alpha=32, dropout 0, all linear layers of the LLM (vision tower and aligner frozen). Offline GRPO
37
+ (ms-swift): 8 candidates per prompt, 16 prompts per step (batch 128), 150 steps, lr 5e-5 cosine to 0.1x,
38
+ warmup 5%, KL beta 1e-3, temperature 0.9, top-p 0.95, max completion 512 tokens.
39
+ Reward: `Gyubeum/Qwen3-VL-8B-Instruct-UI-Genie-scoring-128k-balanced` @ `4ce62423` (Bradley-Terry scalar), shaped with GPRS group win-share
40
+ (no std scaling); candidate coordinates are rescaled from the 0-1000 grid to the RM's declared screen resolution.
41
+ A `terminate` candidate gets 0 unless the context is labelled `is_next_terminate=True`.
42
+ `trainer_state.json` has the per-step logs.
43
+
44
+ ## Evaluation
45
+
46
+ HV65 (65 human-verified AndroidWorld tasks, greedy, one episode per task and condition), success rate:
47
+
48
+ | clean | error_t | mean |
49
+ |---:|---:|---:|
50
+ | 29.2% | 21.5% | 25.4% |
51
+
52
+ Base Qwen3-VL-4B-Instruct without RL: 20.0% / 21.5% / 20.8%. One seed per run.
grpo4b-ui50-t25-t1-25-20260924/adapter_config.json ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "Qwen/Qwen3-VL-4B-Instruct",
7
+ "bias": "none",
8
+ "corda_config": null,
9
+ "ensure_weight_tying": false,
10
+ "eva_config": null,
11
+ "exclude_modules": null,
12
+ "fan_in_fan_out": false,
13
+ "inference_mode": true,
14
+ "init_lora_weights": true,
15
+ "layer_replication": null,
16
+ "layers_pattern": null,
17
+ "layers_to_transform": null,
18
+ "loftq_config": {},
19
+ "lora_alpha": 32,
20
+ "lora_bias": false,
21
+ "lora_dropout": 0.0,
22
+ "lora_ga_config": null,
23
+ "megatron_config": null,
24
+ "megatron_core": "megatron.core",
25
+ "modules_to_save": [],
26
+ "peft_type": "LORA",
27
+ "peft_version": "0.19.1",
28
+ "qalora_group_size": 16,
29
+ "r": 64,
30
+ "rank_pattern": {},
31
+ "revision": "ebb281ec70b05090aa6165b016eac8ec08e71b17",
32
+ "target_modules": "^(model\\.language_model(?=\\.).*\\.(gate_proj|down_proj|q_proj|up_proj|k_proj|o_proj|v_proj))$",
33
+ "target_parameters": null,
34
+ "task_type": "CAUSAL_LM",
35
+ "trainable_token_indices": null,
36
+ "use_bdlora": null,
37
+ "use_dora": false,
38
+ "use_qalora": false,
39
+ "use_rslora": false
40
+ }
grpo4b-ui50-t25-t1-25-20260924/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:560ee4fea26fb6d660351432cca3c7a1a80ff3e0b09a55f534bda23795cb10b5
3
+ size 264316960
grpo4b-ui50-t25-t1-25-20260924/trainer_state.json ADDED
The diff for this file is too large to render. See raw diff