Eliovp commited on
Commit
f5b159e
·
1 Parent(s): 1ff1a96

Publish balanced MXFP4 conversion of abenzerps BF16 fine-tune

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +4 -34
  2. LICENSE +55 -0
  3. LICENSES/Apache-2.0.txt +201 -0
  4. NOTICE +7 -0
  5. README.md +151 -0
  6. artifacts/NOTICE +6 -0
  7. artifacts/manifest.json +15 -0
  8. artifacts/mxfp4_weights_gfx1201.so +3 -0
  9. checkpoint.lock.json +327 -0
  10. environment.lock.json +69 -0
  11. evaluation/mi355-correctness.json +1543 -0
  12. evaluation/numerical.json +681 -0
  13. evaluation/quality-pairs-1.png +3 -0
  14. evaluation/quality-pairs-2.png +3 -0
  15. launch.sh +4 -0
  16. processor/added_tokens.json +28 -0
  17. processor/chat_template.jinja +120 -0
  18. processor/merges.txt +0 -0
  19. processor/preprocessor_config.json +39 -0
  20. processor/special_tokens_map.json +31 -0
  21. processor/tokenizer.json +3 -0
  22. processor/tokenizer_config.json +240 -0
  23. processor/video_preprocessor_config.json +41 -0
  24. processor/vocab.json +0 -0
  25. qwen_image21/__init__.py +1 -0
  26. qwen_image21/__main__.py +46 -0
  27. qwen_image21/decoder.py +30 -0
  28. qwen_image21/integrity.py +29 -0
  29. qwen_image21/runtime.py +158 -0
  30. qwen_image21/server.py +74 -0
  31. qwen_image21/weights.py +187 -0
  32. release-manifest.json +475 -0
  33. requirements-mi355.lock.txt +47 -0
  34. requirements.txt +7 -0
  35. result.json +0 -0
  36. scheduler/scheduler_config.json +18 -0
  37. tests/test_decoder_selection.py +32 -0
  38. text_encoder/config.json +64 -0
  39. text_encoder/weights-00001.safetensors +3 -0
  40. text_encoder/weights-00002.safetensors +3 -0
  41. text_encoder/weights-00003.safetensors +3 -0
  42. text_encoder/weights-00004.safetensors +3 -0
  43. text_encoder/weights-00005.safetensors +3 -0
  44. text_encoder/weights-00006.safetensors +3 -0
  45. text_encoder/weights-00007.safetensors +3 -0
  46. text_encoder/weights-00008.safetensors +3 -0
  47. text_encoder/weights-00009.safetensors +3 -0
  48. text_encoder/weights-00010.safetensors +3 -0
  49. text_encoder/weights-00011.safetensors +3 -0
  50. text_encoder/weights-00012.safetensors +3 -0
.gitattributes CHANGED
@@ -1,35 +1,5 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ * -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  *.safetensors filter=lfs diff=lfs merge=lfs -text
3
+ *.so filter=lfs diff=lfs merge=lfs -text
4
+ *.png filter=lfs diff=lfs merge=lfs -text
5
+ processor/tokenizer.json filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
LICENSE ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Qwen RESEARCH LICENSE AGREEMENT
2
+
3
+ Qwen RESEARCH LICENSE AGREEMENT Release Date: September 20, 2026
4
+
5
+ By clicking to agree or by using or distributing any portion or element of the Qwen Materials, you will be deemed to have recognized and accepted the content of this Agreement, which is effective immediately.
6
+
7
+ 1. Definitions
8
+ a. This Qwen RESEARCH LICENSE AGREEMENT (this "Agreement") shall mean the terms and conditions for use, reproduction, distribution and modification of the Materials as defined by this Agreement.
9
+ b. "We" (or "Us") shall mean Hangzhou Tongyi Laboratory Technology Co., Ltd.
10
+ c. "You" (or "Your") shall mean a natural person or legal entity exercising the rights granted by this Agreement and/or using the Materials for any purpose and in any field of use.
11
+ d. "Third Parties" shall mean individuals or legal entities that are not under common control with us or you.
12
+ e. "Qwen" shall mean the large language models, diffusion models, and software and algorithms, consisting of trained model weights, parameters (including optimizer states), machine-learning model code, inference-enabling code, training-enabling code, fine-tuning enabling code and other elements of the foregoing distributed by us.
13
+ f. "Materials" shall mean, collectively, our proprietary Qwen and Documentation (and any portion thereof) made available under this Agreement.
14
+ g. "Source" form shall mean the preferred form for making modifications, including but not limited to model source code, documentation source, and configuration files.
15
+ h. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
16
+ i. "Non-Commercial" shall mean for research or evaluation purposes only.
17
+
18
+ 2. Grant of Rights
19
+ a. You are granted a non-exclusive, worldwide, non-transferable and royalty-free limited license under our intellectual property or other rights owned by us embodied in the Materials to use, reproduce, distribute, copy, create derivative works of, and make modifications to the Materials FOR NON-COMMERCIAL PURPOSES ONLY.
20
+ b. You shall not use the Materials for any commercial purpose without obtaining a separate commercial license from us. If you wish to use the Materials commercially, you shall request a license from us at model-business@notice.qwencloud.com.
21
+
22
+ 3. Redistribution
23
+ Subject to Section 2 (Grant of Rights), you may distribute copies or make the Materials, or derivative works thereof, available as part of a product or service that contains any of them, with or without modifications, and in Source or Object form, provided that you meet the following conditions:
24
+ a. You shall give any other recipients of the Materials or derivative works a copy of this Agreement;
25
+ b. You shall cause any modified files to carry prominent notices stating that you changed the files;
26
+ c. You shall retain in all copies of the Materials that you distribute the following attribution notices within a "Notice" text file distributed as a part of such copies: "Qwen is licensed under the Qwen RESEARCH LICENSE AGREEMENT, Copyright (c) 2026 Hangzhou Tongyi Laboratory Technology Co., Ltd. All Rights Reserved."; and
27
+ d. You may add your own copyright statement to your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of your modifications, or for any such derivative works as a whole, provided your use, reproduction, and distribution of the work otherwise complies with the terms and conditions of this Agreement.
28
+
29
+ 4. Rules of use
30
+ a. The Materials may be subject to export controls or restrictions in China, the United States or other countries or regions. You shall comply with applicable laws and regulations in your use of the Materials.
31
+ b. If you use the Materials or any outputs or results therefrom to create, train, fine-tune, or improve an AI model that is distributed or made available, you shall prominently display “Built with Qwen” or “Improved using Qwen” in the related product documentation.
32
+ c. You shall not use "Qwen" as the primary name or identifier of any derivative works or products; reasonable descriptive use (e.g., "fine-tuned from Qwen Image") is permitted.
33
+
34
+ 5. Intellectual Property
35
+ a. We retain ownership of all intellectual property rights in and to the Materials and derivatives made by or for us. Conditioned upon compliance with the terms and conditions of this Agreement, with respect to any derivative works and modifications of the Materials that are made by you, you are and will be the owner of such derivative works and modifications.
36
+ b. No trademark license is granted to use the trade names, trademarks, service marks, or product names of us, except as required to fulfill notice requirements under this Agreement or as required for reasonable and customary use in describing and redistributing the Materials.
37
+ c. If you commence a lawsuit or other proceedings (including a cross-claim or counterclaim in a lawsuit) against us or any entity alleging that the Materials or any output therefrom, or any part of the foregoing, infringe any intellectual property or other right owned or licensable by you, then all licenses granted to you under this Agreement shall terminate as of the date such lawsuit or other proceeding is commenced or brought.
38
+
39
+ 6. Disclaimer of Warranty and Limitation of Liability
40
+ a. We are not obligated to support, update, provide training for, or develop any further version of the Qwen Materials or to grant any license thereto.
41
+ b. THE MATERIALS ARE PROVIDED "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF ANY KIND INCLUDING WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. WE MAKE NO WARRANTY AND ASSUME NO RESPONSIBILITY FOR THE SAFETY OR STABILITY OF THE MATERIALS AND ANY OUTPUT THEREFROM.
42
+ c. IN NO EVENT SHALL WE BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE MATERIALS OR ANY OUTPUT OF IT, NO MATTER HOW IT’S CAUSED.
43
+ d. You will defend, indemnify and hold harmless us from and against any claim by any third party arising out of or related to your use or distribution of the Materials.
44
+
45
+ 7. Survival and Termination.
46
+ a. The term of this Agreement shall commence upon your acceptance of this Agreement or access to the Materials and will continue in full force and effect until terminated in accordance with the terms and conditions herein.
47
+ b. We may terminate this Agreement if you breach any of the terms or conditions of this Agreement. Upon termination of this Agreement, you must delete and cease use of the Materials. Sections 6 and 8 shall survive the termination of this Agreement.
48
+
49
+ 8. Governing Law and Jurisdiction.
50
+ a. This Agreement and any dispute arising out of or relating to it will be governed by the laws of China, without regard to conflict of law principles, and the UN Convention on Contracts for the International Sale of Goods does not apply to this Agreement.
51
+ b. The People's Courts in Hangzhou City shall have exclusive jurisdiction over any dispute arising out of this Agreement.
52
+
53
+ 9. Other Terms and Conditions.
54
+ a. Any arrangements, understandings, or agreements regarding the Material not stated herein are separate from and independent of the terms and conditions of this Agreement. You shall request a separate license from us, if you use the Materials in ways not expressly agreed to in this Agreement.
55
+ b. We shall not be bound by any additional or different terms or conditions communicated by you unless expressly agreed.
LICENSES/Apache-2.0.txt ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
NOTICE ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Qwen is licensed under the Qwen RESEARCH LICENSE AGREEMENT, Copyright (c) 2026 Hangzhou Tongyi Laboratory Technology Co., Ltd. All Rights Reserved.
2
+
3
+ Built with Qwen. Fine-tuned checkpoint published by abenzerps in abenzerps/Qwen-Image-2.1-Uncensored-GGUF, revision 40319fb15542f0ad22921e0124a191a8a935a60a. The author describes training and merging a LoRA; the recipe and training data have not been independently verified.
4
+
5
+ EliovpAI extracted the BF16 tensor bytes losslessly from qwen-image-2.1-UC-BF16.gguf and converted the transformer to the balanced Quark MXFP4 profile. Text/vision encoding reuses the verified balanced conversion of the original Qwen weights; the VAE retains BF16 inference precision. Original companion source: Qwen/Qwen-Image-2.1, revision 790c92633540aa0cb11d9abf19eb46d861714758.
6
+
7
+ Modified packed safetensors carry a conversion notice. Runtime modifications add architecture-based selection of the existing native decoder, checkpoint verification and the attributed model identity. No new fine-tuning was performed by EliovpAI for this release. Native runtime terms are provided in artifacts/NOTICE.
README.md ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: other
3
+ license_name: qwen-research
4
+ license_link: LICENSE
5
+ base_model: abenzerps/Qwen-Image-2.1-Uncensored-GGUF
6
+ base_model_relation: quantized
7
+ pipeline_tag: text-to-image
8
+ tags:
9
+ - mxfp4
10
+ - amd
11
+ - rocm
12
+ - image-editing
13
+ - rgba
14
+ ---
15
+
16
+ # Qwen_Image-2.1-Uncensored-MXFP4-Paiton
17
+
18
+ **Built with Qwen.** This is EliovpAI's balanced MXFP4 conversion of the BF16
19
+ checkpoint published by [abenzerps](https://huggingface.co/abenzerps/Qwen-Image-2.1-Uncensored-GGUF),
20
+ derived from [Qwen-Image-2.1](https://huggingface.co/Qwen/Qwen-Image-2.1).
21
+ Fine-tune credit belongs to abenzerps; Paiton supplies the conversion and runtime
22
+ integration. This was converted from BF16, not from a lower-bit GGUF quant.
23
+
24
+ The author describes a merged LoRA in
25
+ [the source discussion](https://huggingface.co/abenzerps/Qwen-Image-2.1-Uncensored-GGUF/discussions/20).
26
+ The training recipe is not published. “Uncensored” retains the author's model
27
+ label; our ordinary-image correctness screen does not verify every claimed
28
+ fine-tuning behavior or guarantee unrestricted outputs.
29
+
30
+ ## Weights and runtimes
31
+
32
+ Tensor payload: **8.674 GiB**. Storage uses E2M1 MXFP4 with one E8M0 scale per 32
33
+ columns. The balanced recipe packs 224 transformer and 372 text/vision targets.
34
+ Transformer input/output/conditioning, normalizations, biases and the VAE retain
35
+ BF16 inference precision. Activations remain BF16 in this package.
36
+
37
+ The supplied loader is required; an unmodified
38
+ `DiffusionPipeline.from_pretrained` cannot load this packed format.
39
+
40
+ | Runtime | Behavior |
41
+ | --- | --- |
42
+ | This HF package, compatible `gfx1201` GPU | Automatically uses the included, SHA-256-verified native HIP weight decoder |
43
+ | This HF package, other supported ROCm GPU | Uses framework weight reconstruction; tested on MI355X |
44
+ | Paiton plugin/container | Uses the existing optimized RDNA4 pipeline, with checkpoint selection at launch |
45
+
46
+ The included decoder is the existing released binary, unchanged. It has no Torch
47
+ or Triton dependency; the surrounding image pipeline uses the pinned framework.
48
+ The additional attention, normalization and GEMM optimizations are supplied by
49
+ the plugin/container. The compiler and generated implementation source are not
50
+ included. The portable decoder does not provide those serving optimizations.
51
+
52
+ ## One container, either model
53
+
54
+ The plugin's v1.0.3 launcher selects the model before loading it:
55
+
56
+ ```bash
57
+ ./models/Qwen-Image-2.1/serve-docker.sh --model uncensored
58
+ ./models/Qwen-Image-2.1/serve-docker.sh --model original
59
+ ```
60
+
61
+ Run one worker at a time. `original` remains the default. Both selections use the
62
+ same container and native libraries, with separate pinned HF revisions and file
63
+ hashes. The uncensored selection defaults to the `exact` BF16 arithmetic profile;
64
+ the original retains its existing `schedule-int8` default. Low-precision profiles
65
+ remain explicit options and have not been graded on this fine-tune.
66
+
67
+ Without a checkout:
68
+
69
+ ```bash
70
+ docker run --rm --device /dev/kfd --device /dev/dri --ipc=host -p 127.0.0.1:8191:8191 -v paiton-qwen-image21-cache:/cache ghcr.io/eliovp/paiton-vllm-plugin:qwen-image21-mxfp4-rdna4-v1.0.3 --model uncensored
71
+ ```
72
+
73
+ The API identifies this checkpoint as `paiton-image-2.1-uncensored`. A generation
74
+ request may omit `model` to use the loaded checkpoint. Switching checkpoints
75
+ requires restarting the worker; two models are not resident simultaneously.
76
+
77
+ ## Direct package use
78
+
79
+ Download this repository with the Hugging Face CLI. Use Python 3.12 and a ROCm
80
+ PyTorch stack compatible with the GPU. Install the pinned image dependencies
81
+ from `requirements.txt`; `requirements-mi355.lock.txt` records the tested MI355
82
+ environment. Native decoder use requires a runtime able to load the included
83
+ ROCm 10 artifact; an unavailable native library falls back to framework decoding
84
+ in `auto` mode and records the reason.
85
+
86
+ ```bash
87
+ hf download EliovpAI/Qwen_Image-2.1-Uncensored-MXFP4-Paiton --local-dir model
88
+ cd model
89
+ python -m pip install -r requirements.txt
90
+ ./launch.sh --model-dir . generate --prompt 'A green ceramic teapot on a wooden table' --size 2048 --seed 44 --output ../outputs/teapot.png
91
+ ```
92
+
93
+ Use `--decoder framework` or `--decoder native` before `generate` to choose
94
+ explicitly. `--mode rgba` requests transparency. Editing uses `--mode edit`, one
95
+ `--image` and `--size 1024`. Supported generation sizes are 1024 and 2048 square,
96
+ batch one, 40 steps and guidance 1.0. No CPU model offload or VAE tiling is used.
97
+ Whole-pipeline graph capture is unsupported.
98
+
99
+ ## Correctness and measured limits
100
+
101
+ Conversion and correctness were tested on **MI355X (`gfx950`)**, Torch
102
+ `2.10.0+rocm7.1`, HIP `7.1.25424`, Quark `0.12.post1+rocm71.torch2.10`, and
103
+ Diffusers commit `7263f3317f6b392d62f41e9d75ed9d7e21fc5a5c`.
104
+
105
+ - All 297 BF16 source tensors were extracted losslessly. All 224 converted
106
+ transformer layers matched Quark through an independent MXFP4 decoder, and
107
+ all 73 intentionally BF16 transformer tensors remained exact.
108
+ - Eight paired 2048-square images were compared with the fine-tune's BF16
109
+ reference. Mean CLIPScore was 0.9024 → 0.8688; mean LPIPS was 0.1927. Quantization
110
+ can change composition and text rendering. This is a descriptive screen, not
111
+ an image-equivalence or human-preference guarantee. See the
112
+ [paired images](evaluation/quality-pairs-1.png),
113
+ [remaining pairs](evaluation/quality-pairs-2.png) and
114
+ [complete measurements](evaluation/mi355-correctness.json).
115
+ - Non-default streams, RGBA with alpha spanning 0–255, editing and A–B–A passed.
116
+ Repeated prompt embeddings and final denoiser latents were bit-identical.
117
+ PNG pixels showed the same small VAE variability seen in BF16 controls:
118
+ repeated-image RGB PSNR was approximately 61.2 dB.
119
+ - Instrumented MI355 MXFP4 generation took 23.60 seconds for the first tested
120
+ 2048 request and 21.13–21.52 seconds across seven subsequent, different prompts.
121
+ Sampled whole-device peak was 32.31 GiB for that screen and 34.59 GiB across the
122
+ mode suite. A 30 GiB framework allocator cap failed during VAE decoding;
123
+ successful correctness runs used a 64 GiB cap. These are instrumented
124
+ framework results, not R9700 serving measurements.
125
+
126
+ **This fine-tune has not been run on R9700 in this qualification.** Its tensor
127
+ layout matches the existing optimized pipeline, but the original model's R9700
128
+ latency, VRAM and low-precision quality measurements do not qualify this new
129
+ checkpoint. Its native decoder is reused from the previously qualified release.
130
+
131
+ ## Provenance and license
132
+
133
+ Source revision: `40319fb15542f0ad22921e0124a191a8a935a60a`.
134
+ Source file: `qwen-image-2.1-UC-BF16.gguf`.
135
+ SHA-256: `f151c683a8aed4b310777017ebbbe3f2180f1180f7867115171adb7d50b0762a`.
136
+ The unchanged original text encoder and VAE come from Qwen revision
137
+ `790c92633540aa0cb11d9abf19eb46d861714758`; the encoder reuses our verified balanced
138
+ conversion. `result.json` and `checkpoint.lock.json` record the complete layout
139
+ and hashes. Conversion tools are included under `tools/` and require the pinned
140
+ MI355 Quark environment; inference does not require Quark.
141
+
142
+ The original [RDNA4 package](https://huggingface.co/EliovpAI/Qwen_Image-2.1-MXFP4-Paiton-RDNA4)
143
+ and [portable package](https://huggingface.co/EliovpAI/Qwen_Image-2.1-MXFP4) contain
144
+ the same original-model tensor data, with different loaders and metadata. This
145
+ repository contains the distinct fine-tune and keeps the Paiton storage format
146
+ for plugin compatibility.
147
+
148
+ The weights remain subject to the [Qwen Research License](LICENSE), which allows
149
+ non-commercial research and evaluation; commercial use requires a separate
150
+ upstream license. See [NOTICE](NOTICE) and `artifacts/NOTICE` for attribution and
151
+ native-runtime terms.
artifacts/NOTICE ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ Paiton native runtime artifact. Copyright 2026 ElioVP.
2
+ This compiled runtime artifact is distributed under the Apache License 2.0,
3
+ copied in ../LICENSES/Apache-2.0.txt, following the Paiton plugin's runtime
4
+ distribution policy. The proprietary compiler and generated implementation
5
+ source are not included or relicensed. The separate Qwen Research License
6
+ continues to govern the model weights and upstream model configuration.
artifacts/manifest.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "file": "mxfp4_weights_gfx1201.so",
3
+ "sha256": "8f8943e4161a71aa786ff5c570e82ffe02324aedfdeb71757109f08773708027",
4
+ "architecture": "gfx1201",
5
+ "abi": "paiton_mxfp4_unpack(uint8*, uint8*, bf16*, size_t, hipStream_t) -> int",
6
+ "rocm": "10.0",
7
+ "framework_dependencies": [],
8
+ "scope": "MXFP4 weight reconstruction only; caller-owned buffers and HIP stream; no allocation or synchronization in kernel entry point",
9
+ "limits": {
10
+ "count_multiple": 32,
11
+ "max_count": 68719476736
12
+ },
13
+ "qualification": "Independent native all-encoding arithmetic, aligned/unaligned buffers, bounds, canaries, nondefault streams, event handoffs, poisoned changed-input graphs and A-B-A; exact model denoiser intermediates, repeated complete requests and task-mode quality gates",
14
+ "abi_version": 1
15
+ }
artifacts/mxfp4_weights_gfx1201.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8f8943e4161a71aa786ff5c570e82ffe02324aedfdeb71757109f08773708027
3
+ size 21032
checkpoint.lock.json ADDED
@@ -0,0 +1,327 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_repository": "abenzerps/Qwen-Image-2.1-Uncensored-GGUF",
3
+ "source_revision": "40319fb15542f0ad22921e0124a191a8a935a60a",
4
+ "tensor_payload_bytes": 9313781512,
5
+ "files": [
6
+ {
7
+ "file": "processor/added_tokens.json",
8
+ "bytes": 707,
9
+ "sha256": "c0284b582e14987fbd3d5a2cb2bd139084371ed9acbae488829a1c900833c680"
10
+ },
11
+ {
12
+ "file": "processor/chat_template.jinja",
13
+ "bytes": 5292,
14
+ "sha256": "3636d0f0bd6bef02654cdffdc447b79cb2cef8ab02cc75267345946291a489e4"
15
+ },
16
+ {
17
+ "file": "processor/merges.txt",
18
+ "bytes": 1671853,
19
+ "sha256": "8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5"
20
+ },
21
+ {
22
+ "file": "processor/preprocessor_config.json",
23
+ "bytes": 782,
24
+ "sha256": "93585062a80db5e8ca038efc7726a3e6411d9db948472d81d63c6303993be8c5"
25
+ },
26
+ {
27
+ "file": "processor/special_tokens_map.json",
28
+ "bytes": 613,
29
+ "sha256": "76862e765266b85aa9459767e33cbaf13970f327a0e88d1c65846c2ddd3a1ecd"
30
+ },
31
+ {
32
+ "file": "processor/tokenizer.json",
33
+ "bytes": 11422654,
34
+ "sha256": "aeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4"
35
+ },
36
+ {
37
+ "file": "processor/tokenizer_config.json",
38
+ "bytes": 5445,
39
+ "sha256": "81ec7bb9530159b326c0bef1d0b6c33d392090524014ea3f0123a3c1eb9c2af5"
40
+ },
41
+ {
42
+ "file": "processor/video_preprocessor_config.json",
43
+ "bytes": 817,
44
+ "sha256": "59c5c9eb52182eb14c06ffb10ca9effd29adce5f238a95de23ca14a38dbd2cb1"
45
+ },
46
+ {
47
+ "file": "processor/vocab.json",
48
+ "bytes": 2776833,
49
+ "sha256": "ca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910"
50
+ },
51
+ {
52
+ "file": "result.json",
53
+ "bytes": 250167,
54
+ "sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89"
55
+ },
56
+ {
57
+ "file": "scheduler/scheduler_config.json",
58
+ "bytes": 485,
59
+ "sha256": "5895f3a167c14a967fe9ac70c64924ae5acc79799e0679fd12907e594a713cd1"
60
+ },
61
+ {
62
+ "file": "text_encoder/config.json",
63
+ "bytes": 1517,
64
+ "sha256": "6001331949f7f86ab6d791a80b12246d4f8da5159fa08c3e62368a39f36d63a9"
65
+ },
66
+ {
67
+ "file": "text_encoder/weights-00001.safetensors",
68
+ "bytes": 330613160,
69
+ "sha256": "f4da6dc292c0a961d74a02dd076d24aee3f38289c7f250c8727d298a86cf0d80"
70
+ },
71
+ {
72
+ "file": "text_encoder/weights-00002.safetensors",
73
+ "bytes": 202806640,
74
+ "sha256": "6683ed125cbeb40d6a00216f64e549d1ce36a766f972c57c8c5686550f26f7d3"
75
+ },
76
+ {
77
+ "file": "text_encoder/weights-00003.safetensors",
78
+ "bytes": 205035120,
79
+ "sha256": "2df7f765d32ef69481f97034f21d344ac9c251fc6a7dbcdcc016e2c4e6b0f5ac"
80
+ },
81
+ {
82
+ "file": "text_encoder/weights-00004.safetensors",
83
+ "bytes": 205035120,
84
+ "sha256": "bbe642ee7e8e3370f9a0445ba5207bfebee202ea25676e7232d1e44038de3c5c"
85
+ },
86
+ {
87
+ "file": "text_encoder/weights-00005.safetensors",
88
+ "bytes": 202756768,
89
+ "sha256": "c42fca1cc6c1a8ee0e92b0a840faf95e91f8d0852d79d2d81c29869f7cea3a7b"
90
+ },
91
+ {
92
+ "file": "text_encoder/weights-00006.safetensors",
93
+ "bytes": 182434800,
94
+ "sha256": "17df5a53455f78da82104741e906359a5b4eabf697fc4a9294b0891874e9c9c7"
95
+ },
96
+ {
97
+ "file": "text_encoder/weights-00007.safetensors",
98
+ "bytes": 202806672,
99
+ "sha256": "309c016ee140abadb50393412c2fd2c2c1d895edfa52ee15bffffbd92d5b5963"
100
+ },
101
+ {
102
+ "file": "text_encoder/weights-00008.safetensors",
103
+ "bytes": 205035152,
104
+ "sha256": "0463a92fa87a14f70b70019c544e92741e63061b4120a0bb219e5cf219d415c3"
105
+ },
106
+ {
107
+ "file": "text_encoder/weights-00009.safetensors",
108
+ "bytes": 205035152,
109
+ "sha256": "14d947a8fa186cae770ea124dffd752b6bfd3a36b3ebd87d904699832c258189"
110
+ },
111
+ {
112
+ "file": "text_encoder/weights-00010.safetensors",
113
+ "bytes": 205035152,
114
+ "sha256": "1b0fb642ff474d93d8fe0a4f0d99d577b4ac4311a4c84cde0a88b16c94b3379a"
115
+ },
116
+ {
117
+ "file": "text_encoder/weights-00011.safetensors",
118
+ "bytes": 207271944,
119
+ "sha256": "260fabe706ff30aacc9348299a6fceaee57af24cfc88ed40a8c412481b639a2b"
120
+ },
121
+ {
122
+ "file": "text_encoder/weights-00012.safetensors",
123
+ "bytes": 205035120,
124
+ "sha256": "b9ced7666665bedd825cef9d37608332dea80c5c89367b3d455c6ed84d3c1987"
125
+ },
126
+ {
127
+ "file": "text_encoder/weights-00013.safetensors",
128
+ "bytes": 75770384,
129
+ "sha256": "1186899042135f046857ee1c31bbefdc0fbaf8fe8a33d01581b49fc3a1800e35"
130
+ },
131
+ {
132
+ "file": "text_encoder/weights-00014.safetensors",
133
+ "bytes": 209498384,
134
+ "sha256": "ef889195f6e3ecd025b7055afdfc5673969ac2e22c159eff57384e8e86a2a5f0"
135
+ },
136
+ {
137
+ "file": "text_encoder/weights-00015.safetensors",
138
+ "bytes": 205035152,
139
+ "sha256": "152bfd694e16d215d314d86e61914905b3e4cf20ee896de94ea0b6fbaa44494f"
140
+ },
141
+ {
142
+ "file": "text_encoder/weights-00016.safetensors",
143
+ "bytes": 205035152,
144
+ "sha256": "469988778630cf75282d04d1654e724d1fe5dd4391382db52c494d9c4b35a29f"
145
+ },
146
+ {
147
+ "file": "text_encoder/weights-00017.safetensors",
148
+ "bytes": 205035152,
149
+ "sha256": "ae931d67cd4e4dcc8534170e49ae0312b9d00ba76f05ec82e26516b1cec4134f"
150
+ },
151
+ {
152
+ "file": "text_encoder/weights-00018.safetensors",
153
+ "bytes": 205035152,
154
+ "sha256": "c7b0cd6cb16d30b9f0a2282a2e165aa92d349abd1443413ba06098cdf7210971"
155
+ },
156
+ {
157
+ "file": "text_encoder/weights-00019.safetensors",
158
+ "bytes": 205035152,
159
+ "sha256": "c83194f470530b85aaba2b5ed0d4ad011f431390dad9fe707c6e2cb9675eee5d"
160
+ },
161
+ {
162
+ "file": "text_encoder/weights-00020.safetensors",
163
+ "bytes": 71315480,
164
+ "sha256": "4a5648e9be5ff84589f90c47cde78285afe64cf14d2da596f87d6558b34deef4"
165
+ },
166
+ {
167
+ "file": "text_encoder/weights-00021.safetensors",
168
+ "bytes": 330613104,
169
+ "sha256": "184e49178bc1843c01b51d758385b5b45d777c3d0e0545bb1bdf7fa9cef3f33d"
170
+ },
171
+ {
172
+ "file": "text_encoder/weights-00022.safetensors",
173
+ "bytes": 209498384,
174
+ "sha256": "d513a74d1e4f3fcf9b89a0cd943a9170dc92e85a0fe81241b3def694b4231e69"
175
+ },
176
+ {
177
+ "file": "text_encoder/weights-00023.safetensors",
178
+ "bytes": 178296192,
179
+ "sha256": "9e3cc9224d17de2ce559ecddd91b2121a1d3e5d371878e89b2df6e2f190906a2"
180
+ },
181
+ {
182
+ "file": "text_encoder/weights.index.json",
183
+ "bytes": 96578,
184
+ "sha256": "52e387de3cb161bb3c49bfa9adfafbecad4ed4b65332b67c517a99f9c80f8247"
185
+ },
186
+ {
187
+ "file": "transformer/config.json",
188
+ "bytes": 370,
189
+ "sha256": "56ae3281c4e6c2d1aa3658252d187488071815fd79bef15808bb0205fc1a2241"
190
+ },
191
+ {
192
+ "file": "transformer/weights-00001.safetensors",
193
+ "bytes": 204473176,
194
+ "sha256": "36ddaae0bed6537ec88e046c6e718307cc76538c70438c0e870078d6d75d0b31"
195
+ },
196
+ {
197
+ "file": "transformer/weights-00002.safetensors",
198
+ "bytes": 205001288,
199
+ "sha256": "e6022b43d61f90ddca5e2d2839cd295527c03d60a24f35fc47268f54acfd63ee"
200
+ },
201
+ {
202
+ "file": "transformer/weights-00003.safetensors",
203
+ "bytes": 205001320,
204
+ "sha256": "154146d6613ed7d4a1d4d71e745ccbd9a0ebbf41b2ccc5c18719c9548b865749"
205
+ },
206
+ {
207
+ "file": "transformer/weights-00004.safetensors",
208
+ "bytes": 205001312,
209
+ "sha256": "3c1705769154f6d17a102cb0a6247375084edb86be66342e983576a1bb6aa95c"
210
+ },
211
+ {
212
+ "file": "transformer/weights-00005.safetensors",
213
+ "bytes": 205000864,
214
+ "sha256": "f647ff6a19319084f412447eaa36629683a4a7a0559062d930a5411accc39a01"
215
+ },
216
+ {
217
+ "file": "transformer/weights-00006.safetensors",
218
+ "bytes": 222826408,
219
+ "sha256": "5f90211ff00349c1ba5174f7354d14ceaa730ff32e38cf3e8d66b549d6f7f515"
220
+ },
221
+ {
222
+ "file": "transformer/weights-00007.safetensors",
223
+ "bytes": 205001320,
224
+ "sha256": "0553e76631c4e011f0f2917fd9e78225ad8eaaf727e2ea8db741bc831eab2f8c"
225
+ },
226
+ {
227
+ "file": "transformer/weights-00008.safetensors",
228
+ "bytes": 205001312,
229
+ "sha256": "32a3febb9d4c2cc15352078bf3b912fc81549376cfc38b9c9bb4291a45afbbf5"
230
+ },
231
+ {
232
+ "file": "transformer/weights-00009.safetensors",
233
+ "bytes": 205001304,
234
+ "sha256": "8b8c326b4fdbbb12ac879cf0e7ccaf6063ea872b6ae70b180e10b5a9051867de"
235
+ },
236
+ {
237
+ "file": "transformer/weights-00010.safetensors",
238
+ "bytes": 205000864,
239
+ "sha256": "6464aaacd54beec15169aa4869e5c1f6b74589f6e402ebe28345ae3e9d49a90c"
240
+ },
241
+ {
242
+ "file": "transformer/weights-00011.safetensors",
243
+ "bytes": 222826408,
244
+ "sha256": "878829a50db13f7155178d55f7f0ac000e0e5be437c604c9a9b2476705a46e32"
245
+ },
246
+ {
247
+ "file": "transformer/weights-00012.safetensors",
248
+ "bytes": 205001320,
249
+ "sha256": "c5f8409cbc21760a02a2530fa5ef18781c6cf1382ed1da378b1ef0f19ff60abe"
250
+ },
251
+ {
252
+ "file": "transformer/weights-00013.safetensors",
253
+ "bytes": 205001328,
254
+ "sha256": "58f4c2e56367921cce13e9a0ba9e4d869601e79609eb37f764b3b5acd9496732"
255
+ },
256
+ {
257
+ "file": "transformer/weights-00014.safetensors",
258
+ "bytes": 205001296,
259
+ "sha256": "ff906d4aa0322b4b58a503f091fb97d6e5d4dc356b84b0497c0a49570f40d701"
260
+ },
261
+ {
262
+ "file": "transformer/weights-00015.safetensors",
263
+ "bytes": 205000856,
264
+ "sha256": "29cea08aa74c9b8ef2c274ca5c0980dc6fae58a2787122749763aa715fbfb326"
265
+ },
266
+ {
267
+ "file": "transformer/weights-00016.safetensors",
268
+ "bytes": 222826392,
269
+ "sha256": "5c0f611079cdd03233fe35cf6d709763df8944b24e48f6011ff43fee0b9b0918"
270
+ },
271
+ {
272
+ "file": "transformer/weights-00017.safetensors",
273
+ "bytes": 205001288,
274
+ "sha256": "44449b2e3fad2175d17a7165307a645d46af2f4096d48f517c10deb1585466de"
275
+ },
276
+ {
277
+ "file": "transformer/weights-00018.safetensors",
278
+ "bytes": 205001296,
279
+ "sha256": "a08d51a0f37a7c500474880a934d0f3d1bd764326b16a68db06839dbab045f9b"
280
+ },
281
+ {
282
+ "file": "transformer/weights-00019.safetensors",
283
+ "bytes": 202902600,
284
+ "sha256": "67ea9aef20743c34a4f86579b79967fdf453d37709b0ffb6d7981190437c0cdb"
285
+ },
286
+ {
287
+ "file": "transformer/weights-00020.safetensors",
288
+ "bytes": 33563056,
289
+ "sha256": "8c085dafd9ae1345fefe11996b88f029992e79f47fdc09ea8c0554a161f3fa9f"
290
+ },
291
+ {
292
+ "file": "transformer/weights.index.json",
293
+ "bytes": 41507,
294
+ "sha256": "146e1a34bb9b15a74ad72e43ba2550fe31787cce53467e0b023f036f0b8ccf1f"
295
+ },
296
+ {
297
+ "file": "vae/config.json",
298
+ "bytes": 2079,
299
+ "sha256": "9785d527b278cb8b210e9f48a8028d92a4190968ce7e24c8fc85d9d1b82f6ba2"
300
+ },
301
+ {
302
+ "file": "vae/weights-00001.safetensors",
303
+ "bytes": 203107424,
304
+ "sha256": "1043a8bb881d751f95b427f9048bb290d8a2e22f0f4f122a5c0b35d7e820d125"
305
+ },
306
+ {
307
+ "file": "vae/weights-00002.safetensors",
308
+ "bytes": 220346496,
309
+ "sha256": "b491b4a0b7322e1e0efa0b4ad6249858583096986dd5c72371584b8c9d925fff"
310
+ },
311
+ {
312
+ "file": "vae/weights-00003.safetensors",
313
+ "bytes": 204800464,
314
+ "sha256": "3e7be3114f62aa557260dc7ddf5825f9fb28c7d8b86b12b774599840da0cf32e"
315
+ },
316
+ {
317
+ "file": "vae/weights-00004.safetensors",
318
+ "bytes": 47254608,
319
+ "sha256": "3f3fc4a4ad9b176b1905cb9e3c4bd37ce98d177f1b8caa561d7a135a0130f690"
320
+ },
321
+ {
322
+ "file": "vae/weights.index.json",
323
+ "bytes": 18726,
324
+ "sha256": "b1153ff6959e47d36954b1af174bfce909401459cf51756d624b0bf53cad3726"
325
+ }
326
+ ]
327
+ }
environment.lock.json ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_model": "Qwen/Qwen-Image-2.1",
3
+ "source_revision": "790c92633540aa0cb11d9abf19eb46d861714758",
4
+ "diffusers_commit": "7263f3317f6b392d62f41e9d75ed9d7e21fc5a5c",
5
+ "profiles": {
6
+ "mi355": {
7
+ "python": "3.12.3",
8
+ "packages": {
9
+ "accelerate": "1.15.0",
10
+ "annotated-doc": "0.0.5",
11
+ "anyio": "4.15.1",
12
+ "certifi": "2026.7.22",
13
+ "charset-normalizer": "3.5.1",
14
+ "click": "8.5.0",
15
+ "diffusers": "0.41.0.dev0",
16
+ "filelock": "3.32.3",
17
+ "fsspec": "2026.6.0",
18
+ "h11": "0.16.0",
19
+ "hf-xet": "1.6.0",
20
+ "httpcore": "1.0.9",
21
+ "httpx": "0.28.1",
22
+ "huggingface-hub": "1.31.0",
23
+ "idna": "3.20",
24
+ "importlib-metadata": "9.0.1",
25
+ "jinja2": "3.1.6",
26
+ "markdown-it-py": "4.2.0",
27
+ "markupsafe": "3.0.3",
28
+ "mdurl": "0.1.2",
29
+ "mpmath": "1.3.0",
30
+ "networkx": "3.6.1",
31
+ "numpy": "2.5.2",
32
+ "packaging": "26.3",
33
+ "pillow": "12.3.0",
34
+ "psutil": "7.2.2",
35
+ "pygments": "2.21.0",
36
+ "pyyaml": "6.0.3",
37
+ "regex": "2026.9.10",
38
+ "requests": "2.34.2",
39
+ "rich": "15.0.0",
40
+ "safetensors": "0.8.0",
41
+ "setuptools": "78.1.0",
42
+ "shellingham": "1.5.4",
43
+ "sympy": "1.14.0",
44
+ "tokenizers": "0.23.2",
45
+ "torch": "2.10.0+rocm7.1",
46
+ "torchvision": "0.25.0+rocm7.1",
47
+ "tqdm": "4.70.1",
48
+ "transformers": "5.17.0",
49
+ "triton-rocm": "3.6.0",
50
+ "typer": "0.27.2",
51
+ "typing-extensions": "4.16.0",
52
+ "urllib3": "2.8.0",
53
+ "zipp": "4.1.0"
54
+ }
55
+ }
56
+ },
57
+ "environment": {
58
+ "MIOPEN_FIND_MODE": "FAST",
59
+ "MIOPEN_DEBUG_CONV_GEMM": "0",
60
+ "TORCH_COMPILE_DISABLE": "1"
61
+ },
62
+ "evaluation": {
63
+ "additional_packages": {
64
+ "lpips": "0.1.4",
65
+ "scipy": "1.18.1"
66
+ },
67
+ "device": "CPU"
68
+ }
69
+ }
evaluation/mi355-correctness.json ADDED
@@ -0,0 +1,1543 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "completed_mi355_correctness_screen",
3
+ "source_sha256": "f151c683a8aed4b310777017ebbbe3f2180f1180f7867115171adb7d50b0762a",
4
+ "quality": {
5
+ "status": "completed_descriptive_quality_screen",
6
+ "count": 8,
7
+ "rows": [
8
+ {
9
+ "id": "neon-first",
10
+ "prompt": "A neon shop sign that reads \"QWEN IMAGE 2.1\", rainy night, reflections on wet pavement",
11
+ "seed": 42,
12
+ "reference_png_sha256": "2729b3620d097c45c5b13db252df0f3e9fd4d4f93faf20b71c4839e2a4d719e2",
13
+ "candidate_png_sha256": "82a23b56fe9e8e80f2616be0189e9aaa47fe1b54532c6d422dd8082ece33dcdf",
14
+ "clipscore_bf16": 1.1144796013832092,
15
+ "clipscore_candidate": 0.8718983083963394,
16
+ "lpips_vs_bf16": 0.36456334590911865,
17
+ "clipscore_delta": -0.2425812929868698
18
+ },
19
+ {
20
+ "id": "portrait-first",
21
+ "prompt": "A natural light editorial portrait of an elderly woman with silver hair and freckles, wearing a blue linen shirt, relaxed expression, soft window light, photographic detail",
22
+ "seed": 43,
23
+ "reference_png_sha256": "14a8cceb24ed63bbd29306013089dcd5ed9f7e68a2efc045397cc3403be44880",
24
+ "candidate_png_sha256": "dc1205eff76d557996d9186f13a41838d134e829c79cf2e7f08e19d82d28d74b",
25
+ "clipscore_bf16": 0.8257061243057251,
26
+ "clipscore_candidate": 0.8091752231121063,
27
+ "lpips_vs_bf16": 0.057727862149477005,
28
+ "clipscore_delta": -0.016530901193618774
29
+ },
30
+ {
31
+ "id": "product-first",
32
+ "prompt": "A studio product photograph of a green ceramic teapot and a white porcelain cup on a pale wooden table, soft shadows, clean white background",
33
+ "seed": 44,
34
+ "reference_png_sha256": "be6aca86e3a1ee27f41dcb4045c5f279e68cd513f9333c052fb9041a86f739d1",
35
+ "candidate_png_sha256": "20397f382e84a3a940e3348894b26ed466afd86ce444cc4abb3369a6558539b8",
36
+ "clipscore_bf16": 0.9173409640789032,
37
+ "clipscore_candidate": 0.9037841111421585,
38
+ "lpips_vs_bf16": 0.05581988766789436,
39
+ "clipscore_delta": -0.01355685293674469
40
+ },
41
+ {
42
+ "id": "animals-first",
43
+ "prompt": "Two red foxes sitting beside a mossy log in a misty pine forest, early morning sunlight, realistic wildlife photography",
44
+ "seed": 45,
45
+ "reference_png_sha256": "ba4e3b9c939faae49b5d985698f34748cabb6bad47eeaaba7bd9e3f72c2eadbe",
46
+ "candidate_png_sha256": "21790e0480350ccbb9af2c10886c348be8cb76e48050e7c655484846c04d073c",
47
+ "clipscore_bf16": 0.8416342735290527,
48
+ "clipscore_candidate": 0.8407427370548248,
49
+ "lpips_vs_bf16": 0.1324639618396759,
50
+ "clipscore_delta": -0.0008915364742279053
51
+ },
52
+ {
53
+ "id": "spatial-first",
54
+ "prompt": "A red cube to the left of a blue sphere, with a small yellow cone behind them, on a white tabletop, clean three dimensional rendering",
55
+ "seed": 46,
56
+ "reference_png_sha256": "d99605f0368a7bf4d843166ef05df8fca7badaaf771b5a1c9079d7c09c5dba33",
57
+ "candidate_png_sha256": "633e7baa29d6dea36cfd9342587604f9f938ecddcab5a9252205f73d2fd505bb",
58
+ "clipscore_bf16": 0.9053816646337509,
59
+ "clipscore_candidate": 0.9046095609664917,
60
+ "lpips_vs_bf16": 0.013449719175696373,
61
+ "clipscore_delta": -0.0007721036672592163
62
+ },
63
+ {
64
+ "id": "illustration-first",
65
+ "prompt": "A watercolor illustration of a small bookshop on a quiet European street, flower boxes under the windows, a bicycle by the door, warm spring sunshine",
66
+ "seed": 47,
67
+ "reference_png_sha256": "82194261767681ff42704aebf80cfdcea70e2224dea1fa3b2fafc1a7610eae35",
68
+ "candidate_png_sha256": "09cc3b43361915a4671e29570a7912fe7a4e5dd4e2bcd3ab9edb61e9e5d30843",
69
+ "clipscore_bf16": 0.8999834954738617,
70
+ "clipscore_candidate": 0.8866769075393677,
71
+ "lpips_vs_bf16": 0.4686177372932434,
72
+ "clipscore_delta": -0.013306587934494019
73
+ },
74
+ {
75
+ "id": "landscape-first",
76
+ "prompt": "A wide landscape photograph of snowy mountains reflected in a calm alpine lake at sunrise, pink clouds, sharp rocks and wildflowers in the foreground",
77
+ "seed": 48,
78
+ "reference_png_sha256": "3c3abcfc552c6ce2d154937f9351c197b6c6dab916e5f30fc9bd9d405e30d5bd",
79
+ "candidate_png_sha256": "a699176e93685c9412ae43cbb8dbcbc9fa43f6996995134c5002af4a490bd63e",
80
+ "clipscore_bf16": 0.889352485537529,
81
+ "clipscore_candidate": 0.8648373186588287,
82
+ "lpips_vs_bf16": 0.31182053685188293,
83
+ "clipscore_delta": -0.024515166878700256
84
+ },
85
+ {
86
+ "id": "poster-first",
87
+ "prompt": "A clean graphic poster with the exact headline \"FRESH COFFEE\" in large readable letters, a simple illustration of a coffee cup, cream and dark brown colors",
88
+ "seed": 49,
89
+ "reference_png_sha256": "4b419904f93122cdb9e610e8f77d0028d76f1e419af29abcd820a353d74c017a",
90
+ "candidate_png_sha256": "1c49b297c04624fbe839303c1c29f71791d81633fcdfcc7d5c1002c2b84cc107",
91
+ "clipscore_bf16": 0.8254755288362503,
92
+ "clipscore_candidate": 0.868946835398674,
93
+ "lpips_vs_bf16": 0.13691122829914093,
94
+ "clipscore_delta": 0.043471306562423706
95
+ }
96
+ ],
97
+ "metric_manifest": {
98
+ "clip_repository": "openai/clip-vit-base-patch32",
99
+ "clip_revision": "3d74acf9a28c67741b2f4f2ea7635f0aaf6f0268",
100
+ "clip_weight_file": "pytorch_model.bin",
101
+ "versions": {
102
+ "torch": "2.10.0+rocm7.1",
103
+ "torchvision": "0.25.0+rocm7.1",
104
+ "transformers": "5.17.0",
105
+ "lpips": "0.1.4",
106
+ "numpy": "2.5.2"
107
+ },
108
+ "files": [
109
+ {
110
+ "file": "config.json",
111
+ "sha256": "b575ef3c36f2a057fa19e221650105052d61cc9c1a972ec15019c6261ec98770",
112
+ "bytes": 4186
113
+ },
114
+ {
115
+ "file": "merges.txt",
116
+ "sha256": "f526393189112391ce6f9795d4695f704121ce452c3aad1f5335cc41337eba85",
117
+ "bytes": 524657
118
+ },
119
+ {
120
+ "file": "preprocessor_config.json",
121
+ "sha256": "910e70b3956ac9879ebc90b22fb3bc8a75b6a0677814500101a4c072bd7857bd",
122
+ "bytes": 316
123
+ },
124
+ {
125
+ "file": "pytorch_model.bin",
126
+ "sha256": "a63082132ba4f97a80bea76823f544493bffa8082296d62d71581a4feff1576f",
127
+ "bytes": 605247071
128
+ },
129
+ {
130
+ "file": "special_tokens_map.json",
131
+ "sha256": "f8c0d6c39aee3f8431078ef6646567b0aba7f2246e9c54b8b99d55c22b707cbf",
132
+ "bytes": 389
133
+ },
134
+ {
135
+ "file": "tokenizer.json",
136
+ "sha256": "b556ac8c99757ffb677208af34bc8c6721572114111a6e0aaf5fa69ff0b8d842",
137
+ "bytes": 2224041
138
+ },
139
+ {
140
+ "file": "tokenizer_config.json",
141
+ "sha256": "34b7336e4bee12e0a9730eaf5189f582ef3c3eea5027f65730e5717256755aad",
142
+ "bytes": 592
143
+ },
144
+ {
145
+ "file": "vocab.json",
146
+ "sha256": "5047b556ce86ccaf6aa22b3ffccfc52d391ea4accdab9c2f2407da5b742d4363",
147
+ "bytes": 862328
148
+ }
149
+ ],
150
+ "alexnet": {
151
+ "file": "alexnet-owt-7be5be79.pth",
152
+ "sha256": "7be5be791159472b1fbf3c69796f7cb30dca7ad8466c2df70058c37116cdee02",
153
+ "bytes": 244408911
154
+ },
155
+ "lpips_calibration_sha256": "df73285e35b22355a2df87cdb6b70b343713b667eddbda73e1977e0c860835c0"
156
+ },
157
+ "reference_variant": "bf16",
158
+ "candidate_variant": "all",
159
+ "clipscore": "2.5 * max(cosine(image,text),0); CLIP ViT-B/32; 'A photo depicts ' prefix; float32 CPU via Transformers; original 224-pixel bicubic center crop",
160
+ "lpips": "lpips 0.1.4, AlexNet v0.1, RGB resized to 512 square with bicubic; inputs [-1,1]; lower means closer to paired BF16, not necessarily better image quality",
161
+ "limitations": "Eight custom prompts and one seed per prompt. Descriptive smoke test, no statistical quality equivalence claim. CLIPScore is not a correctness, typography or human-preference guarantee. LPIPS measures changes in composition as well as degradation. No FID/KID computed on this small sample.",
162
+ "means": {
163
+ "clipscore_bf16": 0.9024192672222853,
164
+ "clipscore_candidate": 0.8688338752835989,
165
+ "clipscore_delta": -0.03358539193868637,
166
+ "lpips_vs_bf16": 0.1926717848982662
167
+ }
168
+ },
169
+ "latency_and_memory": {
170
+ "bf16": {
171
+ "gpu": "_CudaDeviceProperties(name='AMD Radeon Graphics', major=9, minor=5, gcnArchName='gfx950:sramecc+:xnack-', total_memory=294896MB, multi_processor_count=256, uuid=31303338-3666-6265-3937-343836316534, pci_bus_id=117, pci_device_id=0, pci_domain_id=0, L2_cache_size=4MB)",
172
+ "hip": "7.1.25424",
173
+ "versions": {
174
+ "torch": "2.10.0+rocm7.1",
175
+ "diffusers": "0.41.0.dev0",
176
+ "transformers": "5.17.0",
177
+ "accelerate": "1.15.0",
178
+ "safetensors": "0.8.0"
179
+ },
180
+ "allocator_cap_bytes": 68719476736.0,
181
+ "load_seconds": 10.025620744097978,
182
+ "sampled_peak_device_bytes": 57963184128,
183
+ "requests": [
184
+ {
185
+ "id": "neon-first",
186
+ "settings": {
187
+ "width": 2048,
188
+ "height": 2048,
189
+ "output_resolution": 2048,
190
+ "num_inference_steps": 40,
191
+ "true_cfg_scale": 1.0,
192
+ "use_kv_cache": true
193
+ },
194
+ "prompt": "A neon shop sign that reads \"QWEN IMAGE 2.1\", rainy night, reflections on wet pavement",
195
+ "seed": 42,
196
+ "complete_request_to_pil_seconds": 19.358816489111632,
197
+ "complete_request_to_png_seconds": 20.572639046935365,
198
+ "process_start_to_png_seconds": 31.459394913865253,
199
+ "peak_allocated_bytes": 50683621376,
200
+ "peak_reserved_bytes": 56476303360,
201
+ "sampled_peak_device_bytes": 57963184128,
202
+ "png_sha256": "2729b3620d097c45c5b13db252df0f3e9fd4d4f93faf20b71c4839e2a4d719e2",
203
+ "finite": true,
204
+ "remaining_prefix_objects": 0,
205
+ "stream": "dedicated non-default HIP stream",
206
+ "alpha_min": 249,
207
+ "alpha_max": 255
208
+ },
209
+ {
210
+ "id": "portrait-first",
211
+ "settings": {
212
+ "width": 2048,
213
+ "height": 2048,
214
+ "output_resolution": 2048,
215
+ "num_inference_steps": 40,
216
+ "true_cfg_scale": 1.0,
217
+ "use_kv_cache": true
218
+ },
219
+ "prompt": "A natural light editorial portrait of an elderly woman with silver hair and freckles, wearing a blue linen shirt, relaxed expression, soft window light, photographic detail",
220
+ "seed": 43,
221
+ "complete_request_to_pil_seconds": 17.891500659054145,
222
+ "complete_request_to_png_seconds": 19.060148459859192,
223
+ "process_start_to_png_seconds": 50.533550190972164,
224
+ "peak_allocated_bytes": 50682871296,
225
+ "peak_reserved_bytes": 56088330240,
226
+ "sampled_peak_device_bytes": 57589891072,
227
+ "png_sha256": "14a8cceb24ed63bbd29306013089dcd5ed9f7e68a2efc045397cc3403be44880",
228
+ "finite": true,
229
+ "remaining_prefix_objects": 0,
230
+ "stream": "dedicated non-default HIP stream",
231
+ "alpha_min": 249,
232
+ "alpha_max": 255
233
+ },
234
+ {
235
+ "id": "product-first",
236
+ "settings": {
237
+ "width": 2048,
238
+ "height": 2048,
239
+ "output_resolution": 2048,
240
+ "num_inference_steps": 40,
241
+ "true_cfg_scale": 1.0,
242
+ "use_kv_cache": true
243
+ },
244
+ "prompt": "A studio product photograph of a green ceramic teapot and a white porcelain cup on a pale wooden table, soft shadows, clean white background",
245
+ "seed": 44,
246
+ "complete_request_to_pil_seconds": 17.918784850044176,
247
+ "complete_request_to_png_seconds": 18.98277305904776,
248
+ "process_start_to_png_seconds": 69.52774427877739,
249
+ "peak_allocated_bytes": 50682830336,
250
+ "peak_reserved_bytes": 56088330240,
251
+ "sampled_peak_device_bytes": 57589891072,
252
+ "png_sha256": "be6aca86e3a1ee27f41dcb4045c5f279e68cd513f9333c052fb9041a86f739d1",
253
+ "finite": true,
254
+ "remaining_prefix_objects": 0,
255
+ "stream": "dedicated non-default HIP stream",
256
+ "alpha_min": 251,
257
+ "alpha_max": 255
258
+ },
259
+ {
260
+ "id": "animals-first",
261
+ "settings": {
262
+ "width": 2048,
263
+ "height": 2048,
264
+ "output_resolution": 2048,
265
+ "num_inference_steps": 40,
266
+ "true_cfg_scale": 1.0,
267
+ "use_kv_cache": true
268
+ },
269
+ "prompt": "Two red foxes sitting beside a mossy log in a misty pine forest, early morning sunlight, realistic wildlife photography",
270
+ "seed": 45,
271
+ "complete_request_to_pil_seconds": 17.878359139198437,
272
+ "complete_request_to_png_seconds": 18.891418333165348,
273
+ "process_start_to_png_seconds": 88.43161778780632,
274
+ "peak_allocated_bytes": 50682805760,
275
+ "peak_reserved_bytes": 56088330240,
276
+ "sampled_peak_device_bytes": 57589891072,
277
+ "png_sha256": "ba4e3b9c939faae49b5d985698f34748cabb6bad47eeaaba7bd9e3f72c2eadbe",
278
+ "finite": true,
279
+ "remaining_prefix_objects": 0,
280
+ "stream": "dedicated non-default HIP stream",
281
+ "alpha_min": 251,
282
+ "alpha_max": 255
283
+ },
284
+ {
285
+ "id": "spatial-first",
286
+ "settings": {
287
+ "width": 2048,
288
+ "height": 2048,
289
+ "output_resolution": 2048,
290
+ "num_inference_steps": 40,
291
+ "true_cfg_scale": 1.0,
292
+ "use_kv_cache": true
293
+ },
294
+ "prompt": "A red cube to the left of a blue sphere, with a small yellow cone behind them, on a white tabletop, clean three dimensional rendering",
295
+ "seed": 46,
296
+ "complete_request_to_pil_seconds": 17.876462967135012,
297
+ "complete_request_to_png_seconds": 18.9773146440275,
298
+ "process_start_to_png_seconds": 107.42291535879485,
299
+ "peak_allocated_bytes": 50682838528,
300
+ "peak_reserved_bytes": 56088330240,
301
+ "sampled_peak_device_bytes": 57589891072,
302
+ "png_sha256": "d99605f0368a7bf4d843166ef05df8fca7badaaf771b5a1c9079d7c09c5dba33",
303
+ "finite": true,
304
+ "remaining_prefix_objects": 0,
305
+ "stream": "dedicated non-default HIP stream",
306
+ "alpha_min": 253,
307
+ "alpha_max": 255
308
+ },
309
+ {
310
+ "id": "illustration-first",
311
+ "settings": {
312
+ "width": 2048,
313
+ "height": 2048,
314
+ "output_resolution": 2048,
315
+ "num_inference_steps": 40,
316
+ "true_cfg_scale": 1.0,
317
+ "use_kv_cache": true
318
+ },
319
+ "prompt": "A watercolor illustration of a small bookshop on a quiet European street, flower boxes under the windows, a bicycle by the door, warm spring sunshine",
320
+ "seed": 47,
321
+ "complete_request_to_pil_seconds": 17.89926350908354,
322
+ "complete_request_to_png_seconds": 19.175433417083696,
323
+ "process_start_to_png_seconds": 126.6106223037932,
324
+ "peak_allocated_bytes": 50682854912,
325
+ "peak_reserved_bytes": 56088330240,
326
+ "sampled_peak_device_bytes": 57589891072,
327
+ "png_sha256": "82194261767681ff42704aebf80cfdcea70e2224dea1fa3b2fafc1a7610eae35",
328
+ "finite": true,
329
+ "remaining_prefix_objects": 0,
330
+ "stream": "dedicated non-default HIP stream",
331
+ "alpha_min": 240,
332
+ "alpha_max": 255
333
+ },
334
+ {
335
+ "id": "landscape-first",
336
+ "settings": {
337
+ "width": 2048,
338
+ "height": 2048,
339
+ "output_resolution": 2048,
340
+ "num_inference_steps": 40,
341
+ "true_cfg_scale": 1.0,
342
+ "use_kv_cache": true
343
+ },
344
+ "prompt": "A wide landscape photograph of snowy mountains reflected in a calm alpine lake at sunrise, pink clouds, sharp rocks and wildflowers in the foreground",
345
+ "seed": 48,
346
+ "complete_request_to_pil_seconds": 17.80886067217216,
347
+ "complete_request_to_png_seconds": 18.868385752197355,
348
+ "process_start_to_png_seconds": 145.49356518592685,
349
+ "peak_allocated_bytes": 50682838528,
350
+ "peak_reserved_bytes": 56088330240,
351
+ "sampled_peak_device_bytes": 57589891072,
352
+ "png_sha256": "3c3abcfc552c6ce2d154937f9351c197b6c6dab916e5f30fc9bd9d405e30d5bd",
353
+ "finite": true,
354
+ "remaining_prefix_objects": 0,
355
+ "stream": "dedicated non-default HIP stream",
356
+ "alpha_min": 249,
357
+ "alpha_max": 255
358
+ },
359
+ {
360
+ "id": "poster-first",
361
+ "settings": {
362
+ "width": 2048,
363
+ "height": 2048,
364
+ "output_resolution": 2048,
365
+ "num_inference_steps": 40,
366
+ "true_cfg_scale": 1.0,
367
+ "use_kv_cache": true
368
+ },
369
+ "prompt": "A clean graphic poster with the exact headline \"FRESH COFFEE\" in large readable letters, a simple illustration of a coffee cup, cream and dark brown colors",
370
+ "seed": 49,
371
+ "complete_request_to_pil_seconds": 17.880304048070684,
372
+ "complete_request_to_png_seconds": 18.966885151108727,
373
+ "process_start_to_png_seconds": 164.47362234489992,
374
+ "peak_allocated_bytes": 50682879488,
375
+ "peak_reserved_bytes": 56088330240,
376
+ "sampled_peak_device_bytes": 57589891072,
377
+ "png_sha256": "4b419904f93122cdb9e610e8f77d0028d76f1e419af29abcd820a353d74c017a",
378
+ "finite": true,
379
+ "remaining_prefix_objects": 0,
380
+ "stream": "dedicated non-default HIP stream",
381
+ "alpha_min": 241,
382
+ "alpha_max": 255
383
+ }
384
+ ]
385
+ },
386
+ "mxfp4": {
387
+ "gpu": "_CudaDeviceProperties(name='AMD Radeon Graphics', major=9, minor=5, gcnArchName='gfx950:sramecc+:xnack-', total_memory=294896MB, multi_processor_count=256, uuid=31303338-3666-6265-3937-343836316534, pci_bus_id=117, pci_device_id=0, pci_domain_id=0, L2_cache_size=4MB)",
388
+ "hip": "7.1.25424",
389
+ "versions": {
390
+ "torch": "2.10.0+rocm7.1",
391
+ "diffusers": "0.41.0.dev0",
392
+ "transformers": "5.17.0",
393
+ "accelerate": "1.15.0",
394
+ "safetensors": "0.8.0"
395
+ },
396
+ "allocator_cap_bytes": 68719476736.0,
397
+ "load_seconds": 10.885476334951818,
398
+ "sampled_peak_device_bytes": 34695282688,
399
+ "requests": [
400
+ {
401
+ "id": "neon-first",
402
+ "settings": {
403
+ "width": 2048,
404
+ "height": 2048,
405
+ "output_resolution": 2048,
406
+ "num_inference_steps": 40,
407
+ "true_cfg_scale": 1.0,
408
+ "use_kv_cache": true
409
+ },
410
+ "prompt": "A neon shop sign that reads \"QWEN IMAGE 2.1\", rainy night, reflections on wet pavement",
411
+ "seed": 42,
412
+ "complete_request_to_pil_seconds": 22.25142955291085,
413
+ "complete_request_to_png_seconds": 23.60134919709526,
414
+ "process_start_to_png_seconds": 35.76223963499069,
415
+ "peak_allocated_bytes": 27614016512,
416
+ "peak_reserved_bytes": 33197916160,
417
+ "sampled_peak_device_bytes": 34695282688,
418
+ "png_sha256": "82a23b56fe9e8e80f2616be0189e9aaa47fe1b54532c6d422dd8082ece33dcdf",
419
+ "finite": true,
420
+ "remaining_prefix_objects": 0,
421
+ "stream": "dedicated non-default HIP stream",
422
+ "alpha_min": 251,
423
+ "alpha_max": 255
424
+ },
425
+ {
426
+ "id": "portrait-first",
427
+ "settings": {
428
+ "width": 2048,
429
+ "height": 2048,
430
+ "output_resolution": 2048,
431
+ "num_inference_steps": 40,
432
+ "true_cfg_scale": 1.0,
433
+ "use_kv_cache": true
434
+ },
435
+ "prompt": "A natural light editorial portrait of an elderly woman with silver hair and freckles, wearing a blue linen shirt, relaxed expression, soft window light, photographic detail",
436
+ "seed": 43,
437
+ "complete_request_to_pil_seconds": 20.325860454002395,
438
+ "complete_request_to_png_seconds": 21.515132426982746,
439
+ "process_start_to_png_seconds": 57.30159537517466,
440
+ "peak_allocated_bytes": 27614090240,
441
+ "peak_reserved_bytes": 33000783872,
442
+ "sampled_peak_device_bytes": 34512830464,
443
+ "png_sha256": "dc1205eff76d557996d9186f13a41838d134e829c79cf2e7f08e19d82d28d74b",
444
+ "finite": true,
445
+ "remaining_prefix_objects": 0,
446
+ "stream": "dedicated non-default HIP stream",
447
+ "alpha_min": 249,
448
+ "alpha_max": 255
449
+ },
450
+ {
451
+ "id": "product-first",
452
+ "settings": {
453
+ "width": 2048,
454
+ "height": 2048,
455
+ "output_resolution": 2048,
456
+ "num_inference_steps": 40,
457
+ "true_cfg_scale": 1.0,
458
+ "use_kv_cache": true
459
+ },
460
+ "prompt": "A studio product photograph of a green ceramic teapot and a white porcelain cup on a pale wooden table, soft shadows, clean white background",
461
+ "seed": 44,
462
+ "complete_request_to_pil_seconds": 20.175694259116426,
463
+ "complete_request_to_png_seconds": 21.2572456211783,
464
+ "process_start_to_png_seconds": 78.57344847614877,
465
+ "peak_allocated_bytes": 27614049280,
466
+ "peak_reserved_bytes": 33000783872,
467
+ "sampled_peak_device_bytes": 34512830464,
468
+ "png_sha256": "20397f382e84a3a940e3348894b26ed466afd86ce444cc4abb3369a6558539b8",
469
+ "finite": true,
470
+ "remaining_prefix_objects": 0,
471
+ "stream": "dedicated non-default HIP stream",
472
+ "alpha_min": 252,
473
+ "alpha_max": 255
474
+ },
475
+ {
476
+ "id": "animals-first",
477
+ "settings": {
478
+ "width": 2048,
479
+ "height": 2048,
480
+ "output_resolution": 2048,
481
+ "num_inference_steps": 40,
482
+ "true_cfg_scale": 1.0,
483
+ "use_kv_cache": true
484
+ },
485
+ "prompt": "Two red foxes sitting beside a mossy log in a misty pine forest, early morning sunlight, realistic wildlife photography",
486
+ "seed": 45,
487
+ "complete_request_to_pil_seconds": 20.112985134823248,
488
+ "complete_request_to_png_seconds": 21.128877939889207,
489
+ "process_start_to_png_seconds": 99.71564355213195,
490
+ "peak_allocated_bytes": 27614024704,
491
+ "peak_reserved_bytes": 33000783872,
492
+ "sampled_peak_device_bytes": 34512830464,
493
+ "png_sha256": "21790e0480350ccbb9af2c10886c348be8cb76e48050e7c655484846c04d073c",
494
+ "finite": true,
495
+ "remaining_prefix_objects": 0,
496
+ "stream": "dedicated non-default HIP stream",
497
+ "alpha_min": 251,
498
+ "alpha_max": 255
499
+ },
500
+ {
501
+ "id": "spatial-first",
502
+ "settings": {
503
+ "width": 2048,
504
+ "height": 2048,
505
+ "output_resolution": 2048,
506
+ "num_inference_steps": 40,
507
+ "true_cfg_scale": 1.0,
508
+ "use_kv_cache": true
509
+ },
510
+ "prompt": "A red cube to the left of a blue sphere, with a small yellow cone behind them, on a white tabletop, clean three dimensional rendering",
511
+ "seed": 46,
512
+ "complete_request_to_pil_seconds": 20.26443701982498,
513
+ "complete_request_to_png_seconds": 21.339326082961634,
514
+ "process_start_to_png_seconds": 121.07087312918156,
515
+ "peak_allocated_bytes": 27614057472,
516
+ "peak_reserved_bytes": 33000783872,
517
+ "sampled_peak_device_bytes": 34512830464,
518
+ "png_sha256": "633e7baa29d6dea36cfd9342587604f9f938ecddcab5a9252205f73d2fd505bb",
519
+ "finite": true,
520
+ "remaining_prefix_objects": 0,
521
+ "stream": "dedicated non-default HIP stream",
522
+ "alpha_min": 250,
523
+ "alpha_max": 255
524
+ },
525
+ {
526
+ "id": "illustration-first",
527
+ "settings": {
528
+ "width": 2048,
529
+ "height": 2048,
530
+ "output_resolution": 2048,
531
+ "num_inference_steps": 40,
532
+ "true_cfg_scale": 1.0,
533
+ "use_kv_cache": true
534
+ },
535
+ "prompt": "A watercolor illustration of a small bookshop on a quiet European street, flower boxes under the windows, a bicycle by the door, warm spring sunshine",
536
+ "seed": 47,
537
+ "complete_request_to_pil_seconds": 20.258340385043994,
538
+ "complete_request_to_png_seconds": 21.49400136200711,
539
+ "process_start_to_png_seconds": 142.58138910704292,
540
+ "peak_allocated_bytes": 27614073856,
541
+ "peak_reserved_bytes": 33000783872,
542
+ "sampled_peak_device_bytes": 34512830464,
543
+ "png_sha256": "09cc3b43361915a4671e29570a7912fe7a4e5dd4e2bcd3ab9edb61e9e5d30843",
544
+ "finite": true,
545
+ "remaining_prefix_objects": 0,
546
+ "stream": "dedicated non-default HIP stream",
547
+ "alpha_min": 251,
548
+ "alpha_max": 255
549
+ },
550
+ {
551
+ "id": "landscape-first",
552
+ "settings": {
553
+ "width": 2048,
554
+ "height": 2048,
555
+ "output_resolution": 2048,
556
+ "num_inference_steps": 40,
557
+ "true_cfg_scale": 1.0,
558
+ "use_kv_cache": true
559
+ },
560
+ "prompt": "A wide landscape photograph of snowy mountains reflected in a calm alpine lake at sunrise, pink clouds, sharp rocks and wildflowers in the foreground",
561
+ "seed": 48,
562
+ "complete_request_to_pil_seconds": 20.11598986410536,
563
+ "complete_request_to_png_seconds": 21.223621543031186,
564
+ "process_start_to_png_seconds": 163.8212643500883,
565
+ "peak_allocated_bytes": 27614057472,
566
+ "peak_reserved_bytes": 33000783872,
567
+ "sampled_peak_device_bytes": 34512830464,
568
+ "png_sha256": "a699176e93685c9412ae43cbb8dbcbc9fa43f6996995134c5002af4a490bd63e",
569
+ "finite": true,
570
+ "remaining_prefix_objects": 0,
571
+ "stream": "dedicated non-default HIP stream",
572
+ "alpha_min": 220,
573
+ "alpha_max": 255
574
+ },
575
+ {
576
+ "id": "poster-first",
577
+ "settings": {
578
+ "width": 2048,
579
+ "height": 2048,
580
+ "output_resolution": 2048,
581
+ "num_inference_steps": 40,
582
+ "true_cfg_scale": 1.0,
583
+ "use_kv_cache": true
584
+ },
585
+ "prompt": "A clean graphic poster with the exact headline \"FRESH COFFEE\" in large readable letters, a simple illustration of a coffee cup, cream and dark brown colors",
586
+ "seed": 49,
587
+ "complete_request_to_pil_seconds": 20.2616195990704,
588
+ "complete_request_to_png_seconds": 21.38441264606081,
589
+ "process_start_to_png_seconds": 185.22238744003698,
590
+ "peak_allocated_bytes": 27614098432,
591
+ "peak_reserved_bytes": 33000783872,
592
+ "sampled_peak_device_bytes": 34512830464,
593
+ "png_sha256": "1c49b297c04624fbe839303c1c29f71791d81633fcdfcc7d5c1002c2b84cc107",
594
+ "finite": true,
595
+ "remaining_prefix_objects": 0,
596
+ "stream": "dedicated non-default HIP stream",
597
+ "alpha_min": 248,
598
+ "alpha_max": 255
599
+ }
600
+ ]
601
+ }
602
+ },
603
+ "modes": {
604
+ "bf16": {
605
+ "status": "passed_modes_and_aba",
606
+ "variant": "bf16",
607
+ "hardware": {
608
+ "name": "AMD Radeon Graphics",
609
+ "architecture": "gfx950:sramecc+:xnack-",
610
+ "total_memory_bytes": 309220868096,
611
+ "free_before_load_bytes": 308606402560,
612
+ "torch": "2.10.0+rocm7.1",
613
+ "hip": "7.1.25424",
614
+ "memory_budget_gib": 64,
615
+ "packages": {
616
+ "diffusers": "0.41.0.dev0",
617
+ "transformers": "5.17.0",
618
+ "accelerate": "1.15.0",
619
+ "safetensors": "0.8.0",
620
+ "Pillow": "12.3.0",
621
+ "numpy": "2.5.2"
622
+ }
623
+ },
624
+ "backend": "framework",
625
+ "decoder_selection": "Framework decoder selected for gfx950:sramecc+:xnack-",
626
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
627
+ "load_seconds": 13.907202264061198,
628
+ "measurement_scope": "Instrumented correctness run; includes tensor capture overhead; not RDNA4 performance.",
629
+ "requests": [
630
+ {
631
+ "id": "a0",
632
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
633
+ "seed": 51,
634
+ "mode": "text-to-image",
635
+ "settings": {
636
+ "width": 1024,
637
+ "height": 1024,
638
+ "output_resolution": 1024,
639
+ "num_inference_steps": 40,
640
+ "true_cfg_scale": 1.0,
641
+ "use_kv_cache": true
642
+ },
643
+ "metrics": {
644
+ "mode": "text-to-image",
645
+ "seed": 51,
646
+ "settings": {
647
+ "width": 1024,
648
+ "height": 1024,
649
+ "output_resolution": 1024,
650
+ "num_inference_steps": 40,
651
+ "true_cfg_scale": 1.0,
652
+ "use_kv_cache": true
653
+ },
654
+ "backend": "framework",
655
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
656
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
657
+ "request_index": 0,
658
+ "hardware": {
659
+ "name": "AMD Radeon Graphics",
660
+ "architecture": "gfx950:sramecc+:xnack-",
661
+ "total_memory_bytes": 309220868096,
662
+ "free_before_load_bytes": 308606402560,
663
+ "torch": "2.10.0+rocm7.1",
664
+ "hip": "7.1.25424",
665
+ "memory_budget_gib": 64,
666
+ "packages": {
667
+ "diffusers": "0.41.0.dev0",
668
+ "transformers": "5.17.0",
669
+ "accelerate": "1.15.0",
670
+ "safetensors": "0.8.0",
671
+ "Pillow": "12.3.0",
672
+ "numpy": "2.5.2"
673
+ }
674
+ },
675
+ "complete_request_to_pil_seconds": 4.693666683975607,
676
+ "complete_request_to_png_seconds": 4.97829480515793,
677
+ "peak_allocated_bytes": 37080601088,
678
+ "peak_reserved_bytes": 39113981952,
679
+ "sampled_peak_device_bytes": 40108032000,
680
+ "sampling_interval_seconds": 0.02,
681
+ "stream": "dedicated non-default HIP stream",
682
+ "alpha_extrema": [
683
+ 251,
684
+ 255
685
+ ],
686
+ "alpha_below_128_fraction": 0.0
687
+ },
688
+ "png_sha256": "454ad65bd3ff5b1ebf64746f08fcc3cbdeabbd6b4eff3a9fb68ea7d71a7a663e",
689
+ "finite": true,
690
+ "remaining_prefix_objects": 0,
691
+ "repeat_stages": {
692
+ "prompt": {
693
+ "exact": true,
694
+ "mae": 0.0,
695
+ "max_abs": 0.0
696
+ },
697
+ "vae_input": {
698
+ "exact": true,
699
+ "mae": 0.0,
700
+ "max_abs": 0.0
701
+ },
702
+ "vae_output": {
703
+ "exact": true,
704
+ "mae": 0.0,
705
+ "max_abs": 0.0
706
+ }
707
+ }
708
+ },
709
+ {
710
+ "id": "a1",
711
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
712
+ "seed": 51,
713
+ "mode": "text-to-image",
714
+ "settings": {
715
+ "width": 1024,
716
+ "height": 1024,
717
+ "output_resolution": 1024,
718
+ "num_inference_steps": 40,
719
+ "true_cfg_scale": 1.0,
720
+ "use_kv_cache": true
721
+ },
722
+ "metrics": {
723
+ "mode": "text-to-image",
724
+ "seed": 51,
725
+ "settings": {
726
+ "width": 1024,
727
+ "height": 1024,
728
+ "output_resolution": 1024,
729
+ "num_inference_steps": 40,
730
+ "true_cfg_scale": 1.0,
731
+ "use_kv_cache": true
732
+ },
733
+ "backend": "framework",
734
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
735
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
736
+ "request_index": 1,
737
+ "hardware": {
738
+ "name": "AMD Radeon Graphics",
739
+ "architecture": "gfx950:sramecc+:xnack-",
740
+ "total_memory_bytes": 309220868096,
741
+ "free_before_load_bytes": 308606402560,
742
+ "torch": "2.10.0+rocm7.1",
743
+ "hip": "7.1.25424",
744
+ "memory_budget_gib": 64,
745
+ "packages": {
746
+ "diffusers": "0.41.0.dev0",
747
+ "transformers": "5.17.0",
748
+ "accelerate": "1.15.0",
749
+ "safetensors": "0.8.0",
750
+ "Pillow": "12.3.0",
751
+ "numpy": "2.5.2"
752
+ }
753
+ },
754
+ "complete_request_to_pil_seconds": 3.2533539209980518,
755
+ "complete_request_to_png_seconds": 3.5339247649535537,
756
+ "peak_allocated_bytes": 37080601088,
757
+ "peak_reserved_bytes": 38558236672,
758
+ "sampled_peak_device_bytes": 39982202880,
759
+ "sampling_interval_seconds": 0.02,
760
+ "stream": "dedicated non-default HIP stream",
761
+ "alpha_extrema": [
762
+ 251,
763
+ 255
764
+ ],
765
+ "alpha_below_128_fraction": 0.0
766
+ },
767
+ "png_sha256": "985d7b12cb7e803f16e4cfc33182799cd1835384fe649107ab220a85ec6effc9",
768
+ "finite": true,
769
+ "remaining_prefix_objects": 0,
770
+ "repeat_stages": {
771
+ "prompt": {
772
+ "exact": true,
773
+ "mae": 0.0,
774
+ "max_abs": 0.0
775
+ },
776
+ "vae_input": {
777
+ "exact": true,
778
+ "mae": 0.0,
779
+ "max_abs": 0.0
780
+ },
781
+ "vae_output": {
782
+ "exact": false,
783
+ "mae": 0.00032036026823334396,
784
+ "max_abs": 0.03759765625
785
+ }
786
+ }
787
+ },
788
+ {
789
+ "id": "b_rgba",
790
+ "prompt": "A cute cartoon dragon sticker.",
791
+ "seed": 52,
792
+ "mode": "rgba",
793
+ "settings": {
794
+ "width": 2048,
795
+ "height": 2048,
796
+ "output_resolution": 2048,
797
+ "num_inference_steps": 40,
798
+ "true_cfg_scale": 1.0,
799
+ "use_kv_cache": true
800
+ },
801
+ "metrics": {
802
+ "mode": "rgba",
803
+ "seed": 52,
804
+ "settings": {
805
+ "width": 2048,
806
+ "height": 2048,
807
+ "output_resolution": 2048,
808
+ "num_inference_steps": 40,
809
+ "true_cfg_scale": 1.0,
810
+ "use_kv_cache": true
811
+ },
812
+ "backend": "framework",
813
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
814
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
815
+ "request_index": 2,
816
+ "hardware": {
817
+ "name": "AMD Radeon Graphics",
818
+ "architecture": "gfx950:sramecc+:xnack-",
819
+ "total_memory_bytes": 309220868096,
820
+ "free_before_load_bytes": 308606402560,
821
+ "torch": "2.10.0+rocm7.1",
822
+ "hip": "7.1.25424",
823
+ "memory_budget_gib": 64,
824
+ "packages": {
825
+ "diffusers": "0.41.0.dev0",
826
+ "transformers": "5.17.0",
827
+ "accelerate": "1.15.0",
828
+ "safetensors": "0.8.0",
829
+ "Pillow": "12.3.0",
830
+ "numpy": "2.5.2"
831
+ }
832
+ },
833
+ "complete_request_to_pil_seconds": 17.811263096053153,
834
+ "complete_request_to_png_seconds": 18.627668023109436,
835
+ "peak_allocated_bytes": 50683703296,
836
+ "peak_reserved_bytes": 58787364864,
837
+ "sampled_peak_device_bytes": 60284731392,
838
+ "sampling_interval_seconds": 0.02,
839
+ "stream": "dedicated non-default HIP stream",
840
+ "alpha_extrema": [
841
+ 0,
842
+ 255
843
+ ],
844
+ "alpha_below_128_fraction": 0.5432534217834473
845
+ },
846
+ "png_sha256": "5aa06df1783abcda6cc84ea196937dbe32978626fd356f8b6fd1b97252545727",
847
+ "finite": true,
848
+ "remaining_prefix_objects": 0
849
+ },
850
+ {
851
+ "id": "a2",
852
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
853
+ "seed": 51,
854
+ "mode": "text-to-image",
855
+ "settings": {
856
+ "width": 1024,
857
+ "height": 1024,
858
+ "output_resolution": 1024,
859
+ "num_inference_steps": 40,
860
+ "true_cfg_scale": 1.0,
861
+ "use_kv_cache": true
862
+ },
863
+ "metrics": {
864
+ "mode": "text-to-image",
865
+ "seed": 51,
866
+ "settings": {
867
+ "width": 1024,
868
+ "height": 1024,
869
+ "output_resolution": 1024,
870
+ "num_inference_steps": 40,
871
+ "true_cfg_scale": 1.0,
872
+ "use_kv_cache": true
873
+ },
874
+ "backend": "framework",
875
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
876
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
877
+ "request_index": 3,
878
+ "hardware": {
879
+ "name": "AMD Radeon Graphics",
880
+ "architecture": "gfx950:sramecc+:xnack-",
881
+ "total_memory_bytes": 309220868096,
882
+ "free_before_load_bytes": 308606402560,
883
+ "torch": "2.10.0+rocm7.1",
884
+ "hip": "7.1.25424",
885
+ "memory_budget_gib": 64,
886
+ "packages": {
887
+ "diffusers": "0.41.0.dev0",
888
+ "transformers": "5.17.0",
889
+ "accelerate": "1.15.0",
890
+ "safetensors": "0.8.0",
891
+ "Pillow": "12.3.0",
892
+ "numpy": "2.5.2"
893
+ }
894
+ },
895
+ "complete_request_to_pil_seconds": 3.250392859103158,
896
+ "complete_request_to_png_seconds": 3.529084383044392,
897
+ "peak_allocated_bytes": 37080601088,
898
+ "peak_reserved_bytes": 40758149120,
899
+ "sampled_peak_device_bytes": 42255515648,
900
+ "sampling_interval_seconds": 0.02,
901
+ "stream": "dedicated non-default HIP stream",
902
+ "alpha_extrema": [
903
+ 251,
904
+ 255
905
+ ],
906
+ "alpha_below_128_fraction": 0.0
907
+ },
908
+ "png_sha256": "8d523c042a727f408d78ade2ba41d941ba49b8f787b56288eaa4cb578917148d",
909
+ "finite": true,
910
+ "remaining_prefix_objects": 0,
911
+ "repeat_stages": {
912
+ "prompt": {
913
+ "exact": true,
914
+ "mae": 0.0,
915
+ "max_abs": 0.0
916
+ },
917
+ "vae_input": {
918
+ "exact": true,
919
+ "mae": 0.0,
920
+ "max_abs": 0.0
921
+ },
922
+ "vae_output": {
923
+ "exact": false,
924
+ "mae": 0.00031989446142688394,
925
+ "max_abs": 0.0255126953125
926
+ }
927
+ }
928
+ },
929
+ {
930
+ "id": "b_edit",
931
+ "prompt": "Change the green teapot to bright red. Keep the table and composition.",
932
+ "seed": 53,
933
+ "mode": "edit",
934
+ "settings": {
935
+ "width": 1024,
936
+ "height": 1024,
937
+ "output_resolution": 1024,
938
+ "num_inference_steps": 40,
939
+ "true_cfg_scale": 1.0,
940
+ "use_kv_cache": true
941
+ },
942
+ "metrics": {
943
+ "mode": "edit",
944
+ "seed": 53,
945
+ "settings": {
946
+ "width": 1024,
947
+ "height": 1024,
948
+ "output_resolution": 1024,
949
+ "num_inference_steps": 40,
950
+ "true_cfg_scale": 1.0,
951
+ "use_kv_cache": true
952
+ },
953
+ "backend": "framework",
954
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
955
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
956
+ "request_index": 4,
957
+ "hardware": {
958
+ "name": "AMD Radeon Graphics",
959
+ "architecture": "gfx950:sramecc+:xnack-",
960
+ "total_memory_bytes": 309220868096,
961
+ "free_before_load_bytes": 308606402560,
962
+ "torch": "2.10.0+rocm7.1",
963
+ "hip": "7.1.25424",
964
+ "memory_budget_gib": 64,
965
+ "packages": {
966
+ "diffusers": "0.41.0.dev0",
967
+ "transformers": "5.17.0",
968
+ "accelerate": "1.15.0",
969
+ "safetensors": "0.8.0",
970
+ "Pillow": "12.3.0",
971
+ "numpy": "2.5.2"
972
+ }
973
+ },
974
+ "complete_request_to_pil_seconds": 4.31180297001265,
975
+ "complete_request_to_png_seconds": 4.585201286943629,
976
+ "peak_allocated_bytes": 37090899968,
977
+ "peak_reserved_bytes": 42129686528,
978
+ "sampled_peak_device_bytes": 43675287552,
979
+ "sampling_interval_seconds": 0.02,
980
+ "stream": "dedicated non-default HIP stream",
981
+ "alpha_extrema": [
982
+ 251,
983
+ 255
984
+ ],
985
+ "alpha_below_128_fraction": 0.0
986
+ },
987
+ "png_sha256": "07451384028488629b3f5fe9acede39a7e849e64b7e2f82246774c7e3263ca18",
988
+ "finite": true,
989
+ "remaining_prefix_objects": 0
990
+ },
991
+ {
992
+ "id": "a3",
993
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
994
+ "seed": 51,
995
+ "mode": "text-to-image",
996
+ "settings": {
997
+ "width": 1024,
998
+ "height": 1024,
999
+ "output_resolution": 1024,
1000
+ "num_inference_steps": 40,
1001
+ "true_cfg_scale": 1.0,
1002
+ "use_kv_cache": true
1003
+ },
1004
+ "metrics": {
1005
+ "mode": "text-to-image",
1006
+ "seed": 51,
1007
+ "settings": {
1008
+ "width": 1024,
1009
+ "height": 1024,
1010
+ "output_resolution": 1024,
1011
+ "num_inference_steps": 40,
1012
+ "true_cfg_scale": 1.0,
1013
+ "use_kv_cache": true
1014
+ },
1015
+ "backend": "framework",
1016
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
1017
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1018
+ "request_index": 5,
1019
+ "hardware": {
1020
+ "name": "AMD Radeon Graphics",
1021
+ "architecture": "gfx950:sramecc+:xnack-",
1022
+ "total_memory_bytes": 309220868096,
1023
+ "free_before_load_bytes": 308606402560,
1024
+ "torch": "2.10.0+rocm7.1",
1025
+ "hip": "7.1.25424",
1026
+ "memory_budget_gib": 64,
1027
+ "packages": {
1028
+ "diffusers": "0.41.0.dev0",
1029
+ "transformers": "5.17.0",
1030
+ "accelerate": "1.15.0",
1031
+ "safetensors": "0.8.0",
1032
+ "Pillow": "12.3.0",
1033
+ "numpy": "2.5.2"
1034
+ }
1035
+ },
1036
+ "complete_request_to_pil_seconds": 3.2640902339480817,
1037
+ "complete_request_to_png_seconds": 3.5425091159995645,
1038
+ "peak_allocated_bytes": 37080601600,
1039
+ "peak_reserved_bytes": 42144366592,
1040
+ "sampled_peak_device_bytes": 43689967616,
1041
+ "sampling_interval_seconds": 0.02,
1042
+ "stream": "dedicated non-default HIP stream",
1043
+ "alpha_extrema": [
1044
+ 251,
1045
+ 255
1046
+ ],
1047
+ "alpha_below_128_fraction": 0.0
1048
+ },
1049
+ "png_sha256": "d87d03359999a20df26a710c93dcbef9330a884cf8796654b063337c7350ef87",
1050
+ "finite": true,
1051
+ "remaining_prefix_objects": 0,
1052
+ "repeat_stages": {
1053
+ "prompt": {
1054
+ "exact": true,
1055
+ "mae": 0.0,
1056
+ "max_abs": 0.0
1057
+ },
1058
+ "vae_input": {
1059
+ "exact": true,
1060
+ "mae": 0.0,
1061
+ "max_abs": 0.0
1062
+ },
1063
+ "vae_output": {
1064
+ "exact": false,
1065
+ "mae": 0.00031883540214039385,
1066
+ "max_abs": 0.0281982421875
1067
+ }
1068
+ }
1069
+ }
1070
+ ]
1071
+ },
1072
+ "mxfp4": {
1073
+ "status": "passed_modes_and_aba",
1074
+ "variant": "mxfp4",
1075
+ "hardware": {
1076
+ "name": "AMD Radeon Graphics",
1077
+ "architecture": "gfx950:sramecc+:xnack-",
1078
+ "total_memory_bytes": 309220868096,
1079
+ "free_before_load_bytes": 308606402560,
1080
+ "torch": "2.10.0+rocm7.1",
1081
+ "hip": "7.1.25424",
1082
+ "memory_budget_gib": 64,
1083
+ "packages": {
1084
+ "diffusers": "0.41.0.dev0",
1085
+ "transformers": "5.17.0",
1086
+ "accelerate": "1.15.0",
1087
+ "safetensors": "0.8.0",
1088
+ "Pillow": "12.3.0",
1089
+ "numpy": "2.5.2"
1090
+ }
1091
+ },
1092
+ "backend": "framework",
1093
+ "decoder_selection": "Framework decoder selected for gfx950:sramecc+:xnack-",
1094
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1095
+ "load_seconds": 9.338267172919586,
1096
+ "measurement_scope": "Instrumented correctness run; includes tensor capture overhead; not RDNA4 performance.",
1097
+ "requests": [
1098
+ {
1099
+ "id": "a0",
1100
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
1101
+ "seed": 51,
1102
+ "mode": "text-to-image",
1103
+ "settings": {
1104
+ "width": 1024,
1105
+ "height": 1024,
1106
+ "output_resolution": 1024,
1107
+ "num_inference_steps": 40,
1108
+ "true_cfg_scale": 1.0,
1109
+ "use_kv_cache": true
1110
+ },
1111
+ "metrics": {
1112
+ "mode": "text-to-image",
1113
+ "seed": 51,
1114
+ "settings": {
1115
+ "width": 1024,
1116
+ "height": 1024,
1117
+ "output_resolution": 1024,
1118
+ "num_inference_steps": 40,
1119
+ "true_cfg_scale": 1.0,
1120
+ "use_kv_cache": true
1121
+ },
1122
+ "backend": "framework",
1123
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
1124
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1125
+ "request_index": 0,
1126
+ "hardware": {
1127
+ "name": "AMD Radeon Graphics",
1128
+ "architecture": "gfx950:sramecc+:xnack-",
1129
+ "total_memory_bytes": 309220868096,
1130
+ "free_before_load_bytes": 308606402560,
1131
+ "torch": "2.10.0+rocm7.1",
1132
+ "hip": "7.1.25424",
1133
+ "memory_budget_gib": 64,
1134
+ "packages": {
1135
+ "diffusers": "0.41.0.dev0",
1136
+ "transformers": "5.17.0",
1137
+ "accelerate": "1.15.0",
1138
+ "safetensors": "0.8.0",
1139
+ "Pillow": "12.3.0",
1140
+ "numpy": "2.5.2"
1141
+ }
1142
+ },
1143
+ "complete_request_to_pil_seconds": 7.320612062932923,
1144
+ "complete_request_to_png_seconds": 7.599831799045205,
1145
+ "peak_allocated_bytes": 17576388096,
1146
+ "peak_reserved_bytes": 18832424960,
1147
+ "sampled_peak_device_bytes": 20371734528,
1148
+ "sampling_interval_seconds": 0.02,
1149
+ "stream": "dedicated non-default HIP stream",
1150
+ "alpha_extrema": [
1151
+ 251,
1152
+ 255
1153
+ ],
1154
+ "alpha_below_128_fraction": 0.0
1155
+ },
1156
+ "png_sha256": "ae287fd92d587cc28b0394e2ed434b0f3d8685da082dd5398dfadeedd9506b7a",
1157
+ "finite": true,
1158
+ "remaining_prefix_objects": 0,
1159
+ "repeat_stages": {
1160
+ "prompt": {
1161
+ "exact": true,
1162
+ "mae": 0.0,
1163
+ "max_abs": 0.0
1164
+ },
1165
+ "vae_input": {
1166
+ "exact": true,
1167
+ "mae": 0.0,
1168
+ "max_abs": 0.0
1169
+ },
1170
+ "vae_output": {
1171
+ "exact": true,
1172
+ "mae": 0.0,
1173
+ "max_abs": 0.0
1174
+ }
1175
+ }
1176
+ },
1177
+ {
1178
+ "id": "a1",
1179
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
1180
+ "seed": 51,
1181
+ "mode": "text-to-image",
1182
+ "settings": {
1183
+ "width": 1024,
1184
+ "height": 1024,
1185
+ "output_resolution": 1024,
1186
+ "num_inference_steps": 40,
1187
+ "true_cfg_scale": 1.0,
1188
+ "use_kv_cache": true
1189
+ },
1190
+ "metrics": {
1191
+ "mode": "text-to-image",
1192
+ "seed": 51,
1193
+ "settings": {
1194
+ "width": 1024,
1195
+ "height": 1024,
1196
+ "output_resolution": 1024,
1197
+ "num_inference_steps": 40,
1198
+ "true_cfg_scale": 1.0,
1199
+ "use_kv_cache": true
1200
+ },
1201
+ "backend": "framework",
1202
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
1203
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1204
+ "request_index": 1,
1205
+ "hardware": {
1206
+ "name": "AMD Radeon Graphics",
1207
+ "architecture": "gfx950:sramecc+:xnack-",
1208
+ "total_memory_bytes": 309220868096,
1209
+ "free_before_load_bytes": 308606402560,
1210
+ "torch": "2.10.0+rocm7.1",
1211
+ "hip": "7.1.25424",
1212
+ "memory_budget_gib": 64,
1213
+ "packages": {
1214
+ "diffusers": "0.41.0.dev0",
1215
+ "transformers": "5.17.0",
1216
+ "accelerate": "1.15.0",
1217
+ "safetensors": "0.8.0",
1218
+ "Pillow": "12.3.0",
1219
+ "numpy": "2.5.2"
1220
+ }
1221
+ },
1222
+ "complete_request_to_pil_seconds": 5.889198625925928,
1223
+ "complete_request_to_png_seconds": 6.165526184020564,
1224
+ "peak_allocated_bytes": 17581107712,
1225
+ "peak_reserved_bytes": 19235078144,
1226
+ "sampled_peak_device_bytes": 20669530112,
1227
+ "sampling_interval_seconds": 0.02,
1228
+ "stream": "dedicated non-default HIP stream",
1229
+ "alpha_extrema": [
1230
+ 250,
1231
+ 255
1232
+ ],
1233
+ "alpha_below_128_fraction": 0.0
1234
+ },
1235
+ "png_sha256": "d457f60daf90fdb1fa2dc5d39f8dfaf44556c1ba3c24689bc0567440ab6c7dc7",
1236
+ "finite": true,
1237
+ "remaining_prefix_objects": 0,
1238
+ "repeat_stages": {
1239
+ "prompt": {
1240
+ "exact": true,
1241
+ "mae": 0.0,
1242
+ "max_abs": 0.0
1243
+ },
1244
+ "vae_input": {
1245
+ "exact": true,
1246
+ "mae": 0.0,
1247
+ "max_abs": 0.0
1248
+ },
1249
+ "vae_output": {
1250
+ "exact": false,
1251
+ "mae": 0.0003149415133520961,
1252
+ "max_abs": 0.0205078125
1253
+ }
1254
+ }
1255
+ },
1256
+ {
1257
+ "id": "b_rgba",
1258
+ "prompt": "A cute cartoon dragon sticker.",
1259
+ "seed": 52,
1260
+ "mode": "rgba",
1261
+ "settings": {
1262
+ "width": 2048,
1263
+ "height": 2048,
1264
+ "output_resolution": 2048,
1265
+ "num_inference_steps": 40,
1266
+ "true_cfg_scale": 1.0,
1267
+ "use_kv_cache": true
1268
+ },
1269
+ "metrics": {
1270
+ "mode": "rgba",
1271
+ "seed": 52,
1272
+ "settings": {
1273
+ "width": 2048,
1274
+ "height": 2048,
1275
+ "output_resolution": 2048,
1276
+ "num_inference_steps": 40,
1277
+ "true_cfg_scale": 1.0,
1278
+ "use_kv_cache": true
1279
+ },
1280
+ "backend": "framework",
1281
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
1282
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1283
+ "request_index": 2,
1284
+ "hardware": {
1285
+ "name": "AMD Radeon Graphics",
1286
+ "architecture": "gfx950:sramecc+:xnack-",
1287
+ "total_memory_bytes": 309220868096,
1288
+ "free_before_load_bytes": 308606402560,
1289
+ "torch": "2.10.0+rocm7.1",
1290
+ "hip": "7.1.25424",
1291
+ "memory_budget_gib": 64,
1292
+ "packages": {
1293
+ "diffusers": "0.41.0.dev0",
1294
+ "transformers": "5.17.0",
1295
+ "accelerate": "1.15.0",
1296
+ "safetensors": "0.8.0",
1297
+ "Pillow": "12.3.0",
1298
+ "numpy": "2.5.2"
1299
+ }
1300
+ },
1301
+ "complete_request_to_pil_seconds": 20.248595360899344,
1302
+ "complete_request_to_png_seconds": 21.18608776293695,
1303
+ "peak_allocated_bytes": 27614791168,
1304
+ "peak_reserved_bytes": 35632709632,
1305
+ "sampled_peak_device_bytes": 37140561920,
1306
+ "sampling_interval_seconds": 0.02,
1307
+ "stream": "dedicated non-default HIP stream",
1308
+ "alpha_extrema": [
1309
+ 0,
1310
+ 255
1311
+ ],
1312
+ "alpha_below_128_fraction": 0.5232586860656738
1313
+ },
1314
+ "png_sha256": "995ad9e69d803bd5fe56a21ed33627e1aab28ef3653c7f6ec4bb3dbb14379804",
1315
+ "finite": true,
1316
+ "remaining_prefix_objects": 0
1317
+ },
1318
+ {
1319
+ "id": "a2",
1320
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
1321
+ "seed": 51,
1322
+ "mode": "text-to-image",
1323
+ "settings": {
1324
+ "width": 1024,
1325
+ "height": 1024,
1326
+ "output_resolution": 1024,
1327
+ "num_inference_steps": 40,
1328
+ "true_cfg_scale": 1.0,
1329
+ "use_kv_cache": true
1330
+ },
1331
+ "metrics": {
1332
+ "mode": "text-to-image",
1333
+ "seed": 51,
1334
+ "settings": {
1335
+ "width": 1024,
1336
+ "height": 1024,
1337
+ "output_resolution": 1024,
1338
+ "num_inference_steps": 40,
1339
+ "true_cfg_scale": 1.0,
1340
+ "use_kv_cache": true
1341
+ },
1342
+ "backend": "framework",
1343
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
1344
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1345
+ "request_index": 3,
1346
+ "hardware": {
1347
+ "name": "AMD Radeon Graphics",
1348
+ "architecture": "gfx950:sramecc+:xnack-",
1349
+ "total_memory_bytes": 309220868096,
1350
+ "free_before_load_bytes": 308606402560,
1351
+ "torch": "2.10.0+rocm7.1",
1352
+ "hip": "7.1.25424",
1353
+ "memory_budget_gib": 64,
1354
+ "packages": {
1355
+ "diffusers": "0.41.0.dev0",
1356
+ "transformers": "5.17.0",
1357
+ "accelerate": "1.15.0",
1358
+ "safetensors": "0.8.0",
1359
+ "Pillow": "12.3.0",
1360
+ "numpy": "2.5.2"
1361
+ }
1362
+ },
1363
+ "complete_request_to_pil_seconds": 5.926888470072299,
1364
+ "complete_request_to_png_seconds": 6.2028056990820915,
1365
+ "peak_allocated_bytes": 17580583424,
1366
+ "peak_reserved_bytes": 22655533056,
1367
+ "sampled_peak_device_bytes": 24163385344,
1368
+ "sampling_interval_seconds": 0.02,
1369
+ "stream": "dedicated non-default HIP stream",
1370
+ "alpha_extrema": [
1371
+ 250,
1372
+ 255
1373
+ ],
1374
+ "alpha_below_128_fraction": 0.0
1375
+ },
1376
+ "png_sha256": "1a757e0d0c82a2dd9d1e5dc16c1b70dc400d33b3f9e0167778682fe10f54a8c8",
1377
+ "finite": true,
1378
+ "remaining_prefix_objects": 0,
1379
+ "repeat_stages": {
1380
+ "prompt": {
1381
+ "exact": true,
1382
+ "mae": 0.0,
1383
+ "max_abs": 0.0
1384
+ },
1385
+ "vae_input": {
1386
+ "exact": true,
1387
+ "mae": 0.0,
1388
+ "max_abs": 0.0
1389
+ },
1390
+ "vae_output": {
1391
+ "exact": false,
1392
+ "mae": 0.0003153072320856154,
1393
+ "max_abs": 0.02734375
1394
+ }
1395
+ }
1396
+ },
1397
+ {
1398
+ "id": "b_edit",
1399
+ "prompt": "Change the green teapot to bright red. Keep the table and composition.",
1400
+ "seed": 53,
1401
+ "mode": "edit",
1402
+ "settings": {
1403
+ "width": 1024,
1404
+ "height": 1024,
1405
+ "output_resolution": 1024,
1406
+ "num_inference_steps": 40,
1407
+ "true_cfg_scale": 1.0,
1408
+ "use_kv_cache": true
1409
+ },
1410
+ "metrics": {
1411
+ "mode": "edit",
1412
+ "seed": 53,
1413
+ "settings": {
1414
+ "width": 1024,
1415
+ "height": 1024,
1416
+ "output_resolution": 1024,
1417
+ "num_inference_steps": 40,
1418
+ "true_cfg_scale": 1.0,
1419
+ "use_kv_cache": true
1420
+ },
1421
+ "backend": "framework",
1422
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
1423
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1424
+ "request_index": 4,
1425
+ "hardware": {
1426
+ "name": "AMD Radeon Graphics",
1427
+ "architecture": "gfx950:sramecc+:xnack-",
1428
+ "total_memory_bytes": 309220868096,
1429
+ "free_before_load_bytes": 308606402560,
1430
+ "torch": "2.10.0+rocm7.1",
1431
+ "hip": "7.1.25424",
1432
+ "memory_budget_gib": 64,
1433
+ "packages": {
1434
+ "diffusers": "0.41.0.dev0",
1435
+ "transformers": "5.17.0",
1436
+ "accelerate": "1.15.0",
1437
+ "safetensors": "0.8.0",
1438
+ "Pillow": "12.3.0",
1439
+ "numpy": "2.5.2"
1440
+ }
1441
+ },
1442
+ "complete_request_to_pil_seconds": 7.006421661935747,
1443
+ "complete_request_to_png_seconds": 7.279804246034473,
1444
+ "peak_allocated_bytes": 18072499712,
1445
+ "peak_reserved_bytes": 22655533056,
1446
+ "sampled_peak_device_bytes": 24192745472,
1447
+ "sampling_interval_seconds": 0.02,
1448
+ "stream": "dedicated non-default HIP stream",
1449
+ "alpha_extrema": [
1450
+ 251,
1451
+ 255
1452
+ ],
1453
+ "alpha_below_128_fraction": 0.0
1454
+ },
1455
+ "png_sha256": "3f41257d712dc31042f7d4b97c8973e05e5eb58802e83654d021ac16ccd11551",
1456
+ "finite": true,
1457
+ "remaining_prefix_objects": 0
1458
+ },
1459
+ {
1460
+ "id": "a3",
1461
+ "prompt": "A blue ceramic teapot on a wooden table, soft daylight, studio photograph",
1462
+ "seed": 51,
1463
+ "mode": "text-to-image",
1464
+ "settings": {
1465
+ "width": 1024,
1466
+ "height": 1024,
1467
+ "output_resolution": 1024,
1468
+ "num_inference_steps": 40,
1469
+ "true_cfg_scale": 1.0,
1470
+ "use_kv_cache": true
1471
+ },
1472
+ "metrics": {
1473
+ "mode": "text-to-image",
1474
+ "seed": 51,
1475
+ "settings": {
1476
+ "width": 1024,
1477
+ "height": 1024,
1478
+ "output_resolution": 1024,
1479
+ "num_inference_steps": 40,
1480
+ "true_cfg_scale": 1.0,
1481
+ "use_kv_cache": true
1482
+ },
1483
+ "backend": "framework",
1484
+ "decoder_selection_reason": "Framework decoder selected for gfx950:sramecc+:xnack-",
1485
+ "checkpoint_sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89",
1486
+ "request_index": 5,
1487
+ "hardware": {
1488
+ "name": "AMD Radeon Graphics",
1489
+ "architecture": "gfx950:sramecc+:xnack-",
1490
+ "total_memory_bytes": 309220868096,
1491
+ "free_before_load_bytes": 308606402560,
1492
+ "torch": "2.10.0+rocm7.1",
1493
+ "hip": "7.1.25424",
1494
+ "memory_budget_gib": 64,
1495
+ "packages": {
1496
+ "diffusers": "0.41.0.dev0",
1497
+ "transformers": "5.17.0",
1498
+ "accelerate": "1.15.0",
1499
+ "safetensors": "0.8.0",
1500
+ "Pillow": "12.3.0",
1501
+ "numpy": "2.5.2"
1502
+ }
1503
+ },
1504
+ "complete_request_to_pil_seconds": 5.92270573717542,
1505
+ "complete_request_to_png_seconds": 6.197468650061637,
1506
+ "peak_allocated_bytes": 17580583936,
1507
+ "peak_reserved_bytes": 26256343040,
1508
+ "sampled_peak_device_bytes": 27812429824,
1509
+ "sampling_interval_seconds": 0.02,
1510
+ "stream": "dedicated non-default HIP stream",
1511
+ "alpha_extrema": [
1512
+ 251,
1513
+ 255
1514
+ ],
1515
+ "alpha_below_128_fraction": 0.0
1516
+ },
1517
+ "png_sha256": "85024c2a155d1dfcaa6c26a1102c0a35ce77e953ad5f22c922c6b4ab45d822a5",
1518
+ "finite": true,
1519
+ "remaining_prefix_objects": 0,
1520
+ "repeat_stages": {
1521
+ "prompt": {
1522
+ "exact": true,
1523
+ "mae": 0.0,
1524
+ "max_abs": 0.0
1525
+ },
1526
+ "vae_input": {
1527
+ "exact": true,
1528
+ "mae": 0.0,
1529
+ "max_abs": 0.0
1530
+ },
1531
+ "vae_output": {
1532
+ "exact": false,
1533
+ "mae": 0.0003153429424855858,
1534
+ "max_abs": 0.0263671875
1535
+ }
1536
+ }
1537
+ }
1538
+ ]
1539
+ }
1540
+ },
1541
+ "r9700_tested": false,
1542
+ "memory_note": "Two 30 GiB capped framework attempts failed in VAE decoding. Successful paired correctness runs used a 64 GiB framework allocator cap; no offload or tiling. MI355 results do not establish R9700 performance or memory use."
1543
+ }
evaluation/numerical.json ADDED
@@ -0,0 +1,681 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "completed_numerical_and_repeatability_audit",
3
+ "pairs": [
4
+ {
5
+ "id": "animals-first",
6
+ "stages": {
7
+ "denoiser_step_1": {
8
+ "shape": [
9
+ 1,
10
+ 16416,
11
+ 64
12
+ ],
13
+ "relative_l2": 0.09634638299283074,
14
+ "cosine": 0.9953644603283305,
15
+ "mean_abs": 0.11408292056420158,
16
+ "max_abs": 1.943359375
17
+ },
18
+ "denoiser_step_20": {
19
+ "shape": [
20
+ 1,
21
+ 16384,
22
+ 64
23
+ ],
24
+ "relative_l2": 0.18715610722030512,
25
+ "cosine": 0.9827343875945663,
26
+ "mean_abs": 0.1519522301146754,
27
+ "max_abs": 3.4375
28
+ },
29
+ "denoiser_step_40": {
30
+ "shape": [
31
+ 1,
32
+ 16384,
33
+ 64
34
+ ],
35
+ "relative_l2": 0.299732901207232,
36
+ "cosine": 0.9580206963689706,
37
+ "mean_abs": 0.220236588599529,
38
+ "max_abs": 3.71875
39
+ },
40
+ "latents": {
41
+ "shape": [
42
+ 1,
43
+ 16384,
44
+ 64
45
+ ],
46
+ "relative_l2": 0.23900685412357128,
47
+ "cosine": 0.9719319611208836,
48
+ "mean_abs": 0.14952522951807623,
49
+ "max_abs": 3.390625
50
+ },
51
+ "prompt": {
52
+ "shape": [
53
+ 1,
54
+ 32,
55
+ 4096
56
+ ],
57
+ "relative_l2": 0.5371999561425623,
58
+ "cosine": 0.8679684852486477,
59
+ "mean_abs": 3.3008214407600462,
60
+ "max_abs": 972.0
61
+ }
62
+ }
63
+ },
64
+ {
65
+ "id": "illustration-first",
66
+ "stages": {
67
+ "denoiser_step_1": {
68
+ "shape": [
69
+ 1,
70
+ 16422,
71
+ 64
72
+ ],
73
+ "relative_l2": 0.1237791824135282,
74
+ "cosine": 0.9923754659916226,
75
+ "mean_abs": 0.1896706782110182,
76
+ "max_abs": 1.958984375
77
+ },
78
+ "denoiser_step_20": {
79
+ "shape": [
80
+ 1,
81
+ 16384,
82
+ 64
83
+ ],
84
+ "relative_l2": 0.36489702895260007,
85
+ "cosine": 0.9332337678329975,
86
+ "mean_abs": 0.39175740815743154,
87
+ "max_abs": 3.8203125
88
+ },
89
+ "denoiser_step_40": {
90
+ "shape": [
91
+ 1,
92
+ 16384,
93
+ 64
94
+ ],
95
+ "relative_l2": 0.4867897262503415,
96
+ "cosine": 0.8846569299136823,
97
+ "mean_abs": 0.43238412586993746,
98
+ "max_abs": 4.1171875
99
+ },
100
+ "latents": {
101
+ "shape": [
102
+ 1,
103
+ 16384,
104
+ 64
105
+ ],
106
+ "relative_l2": 0.44630895774774676,
107
+ "cosine": 0.9002019106304724,
108
+ "mean_abs": 0.3848923010684757,
109
+ "max_abs": 3.7109375
110
+ },
111
+ "prompt": {
112
+ "shape": [
113
+ 1,
114
+ 38,
115
+ 4096
116
+ ],
117
+ "relative_l2": 0.5213396248155723,
118
+ "cosine": 0.8761256421719154,
119
+ "mean_abs": 3.115390087428846,
120
+ "max_abs": 964.0
121
+ }
122
+ }
123
+ },
124
+ {
125
+ "id": "landscape-first",
126
+ "stages": {
127
+ "denoiser_step_1": {
128
+ "shape": [
129
+ 1,
130
+ 16420,
131
+ 64
132
+ ],
133
+ "relative_l2": 0.11743492799801915,
134
+ "cosine": 0.9933134196249982,
135
+ "mean_abs": 0.1603572918753135,
136
+ "max_abs": 1.958984375
137
+ },
138
+ "denoiser_step_20": {
139
+ "shape": [
140
+ 1,
141
+ 16384,
142
+ 64
143
+ ],
144
+ "relative_l2": 0.2780043661118432,
145
+ "cosine": 0.96195723724868,
146
+ "mean_abs": 0.23745506739210853,
147
+ "max_abs": 3.46875
148
+ },
149
+ "denoiser_step_40": {
150
+ "shape": [
151
+ 1,
152
+ 16384,
153
+ 64
154
+ ],
155
+ "relative_l2": 0.42237397239356156,
156
+ "cosine": 0.9152042636156736,
157
+ "mean_abs": 0.3032575135607942,
158
+ "max_abs": 4.0390625
159
+ },
160
+ "latents": {
161
+ "shape": [
162
+ 1,
163
+ 16384,
164
+ 64
165
+ ],
166
+ "relative_l2": 0.3676629643104064,
167
+ "cosine": 0.9340844764254466,
168
+ "mean_abs": 0.23722753460288004,
169
+ "max_abs": 3.6015625
170
+ },
171
+ "prompt": {
172
+ "shape": [
173
+ 1,
174
+ 36,
175
+ 4096
176
+ ],
177
+ "relative_l2": 0.5442974932308043,
178
+ "cosine": 0.868536731310718,
179
+ "mean_abs": 3.258283414774471,
180
+ "max_abs": 964.0
181
+ }
182
+ }
183
+ },
184
+ {
185
+ "id": "neon-first",
186
+ "stages": {
187
+ "denoiser_step_1": {
188
+ "shape": [
189
+ 1,
190
+ 16415,
191
+ 64
192
+ ],
193
+ "relative_l2": 0.11102784276427484,
194
+ "cosine": 0.9943521918765537,
195
+ "mean_abs": 0.17097874730252569,
196
+ "max_abs": 1.943359375
197
+ },
198
+ "denoiser_step_20": {
199
+ "shape": [
200
+ 1,
201
+ 16384,
202
+ 64
203
+ ],
204
+ "relative_l2": 0.27222016357456835,
205
+ "cosine": 0.9632103635830404,
206
+ "mean_abs": 0.2784836068921557,
207
+ "max_abs": 4.677734375
208
+ },
209
+ "denoiser_step_40": {
210
+ "shape": [
211
+ 1,
212
+ 16384,
213
+ 64
214
+ ],
215
+ "relative_l2": 0.37430698714246186,
216
+ "cosine": 0.9339568865017605,
217
+ "mean_abs": 0.328694256395341,
218
+ "max_abs": 4.1953125
219
+ },
220
+ "latents": {
221
+ "shape": [
222
+ 1,
223
+ 16384,
224
+ 64
225
+ ],
226
+ "relative_l2": 0.3301071795385446,
227
+ "cosine": 0.9466691717875684,
228
+ "mean_abs": 0.2743973804981579,
229
+ "max_abs": 3.93359375
230
+ },
231
+ "prompt": {
232
+ "shape": [
233
+ 1,
234
+ 31,
235
+ 4096
236
+ ],
237
+ "relative_l2": 0.494591097526277,
238
+ "cosine": 0.8786181071551125,
239
+ "mean_abs": 3.678194664178356,
240
+ "max_abs": 972.0
241
+ }
242
+ }
243
+ },
244
+ {
245
+ "id": "portrait-first",
246
+ "stages": {
247
+ "denoiser_step_1": {
248
+ "shape": [
249
+ 1,
250
+ 16424,
251
+ 64
252
+ ],
253
+ "relative_l2": 0.09877505952065657,
254
+ "cosine": 0.9951112277836797,
255
+ "mean_abs": 0.16135481421430806,
256
+ "max_abs": 1.958984375
257
+ },
258
+ "denoiser_step_20": {
259
+ "shape": [
260
+ 1,
261
+ 16384,
262
+ 64
263
+ ],
264
+ "relative_l2": 0.10953258507792321,
265
+ "cosine": 0.9941085678186607,
266
+ "mean_abs": 0.10361493606640604,
267
+ "max_abs": 3.01953125
268
+ },
269
+ "denoiser_step_40": {
270
+ "shape": [
271
+ 1,
272
+ 16384,
273
+ 64
274
+ ],
275
+ "relative_l2": 0.22319793042538488,
276
+ "cosine": 0.9769965151826058,
277
+ "mean_abs": 0.19543845824817296,
278
+ "max_abs": 2.9453125
279
+ },
280
+ "latents": {
281
+ "shape": [
282
+ 1,
283
+ 16384,
284
+ 64
285
+ ],
286
+ "relative_l2": 0.14224873309663885,
287
+ "cosine": 0.990198418805075,
288
+ "mean_abs": 0.11133204035877498,
289
+ "max_abs": 2.859375
290
+ },
291
+ "prompt": {
292
+ "shape": [
293
+ 1,
294
+ 40,
295
+ 4096
296
+ ],
297
+ "relative_l2": 0.5191491495552206,
298
+ "cosine": 0.8787168578140309,
299
+ "mean_abs": 3.1762511789798737,
300
+ "max_abs": 964.0
301
+ }
302
+ }
303
+ },
304
+ {
305
+ "id": "poster-first",
306
+ "stages": {
307
+ "denoiser_step_1": {
308
+ "shape": [
309
+ 1,
310
+ 16425,
311
+ 64
312
+ ],
313
+ "relative_l2": 0.1226644404080342,
314
+ "cosine": 0.9941364409011779,
315
+ "mean_abs": 0.22389983590512255,
316
+ "max_abs": 2.542236328125
317
+ },
318
+ "denoiser_step_20": {
319
+ "shape": [
320
+ 1,
321
+ 16384,
322
+ 64
323
+ ],
324
+ "relative_l2": 0.20410501549113977,
325
+ "cosine": 0.9789742482107255,
326
+ "mean_abs": 0.20914856389551062,
327
+ "max_abs": 4.17578125
328
+ },
329
+ "denoiser_step_40": {
330
+ "shape": [
331
+ 1,
332
+ 16384,
333
+ 64
334
+ ],
335
+ "relative_l2": 0.3034432064357869,
336
+ "cosine": 0.9538721133358834,
337
+ "mean_abs": 0.2989502537276252,
338
+ "max_abs": 4.5390625
339
+ },
340
+ "latents": {
341
+ "shape": [
342
+ 1,
343
+ 16384,
344
+ 64
345
+ ],
346
+ "relative_l2": 0.2470597661083412,
347
+ "cosine": 0.9691558676086933,
348
+ "mean_abs": 0.21283813056413692,
349
+ "max_abs": 4.1015625
350
+ },
351
+ "prompt": {
352
+ "shape": [
353
+ 1,
354
+ 41,
355
+ 4096
356
+ ],
357
+ "relative_l2": 0.46411412505721045,
358
+ "cosine": 0.8968851334245771,
359
+ "mean_abs": 3.3236295239227576,
360
+ "max_abs": 964.0
361
+ }
362
+ }
363
+ },
364
+ {
365
+ "id": "product-first",
366
+ "stages": {
367
+ "denoiser_step_1": {
368
+ "shape": [
369
+ 1,
370
+ 16419,
371
+ 64
372
+ ],
373
+ "relative_l2": 0.07579547700663053,
374
+ "cosine": 0.9971244784610925,
375
+ "mean_abs": 0.14884033807893912,
376
+ "max_abs": 2.859375
377
+ },
378
+ "denoiser_step_20": {
379
+ "shape": [
380
+ 1,
381
+ 16384,
382
+ 64
383
+ ],
384
+ "relative_l2": 0.12168811693527115,
385
+ "cosine": 0.9927524980452118,
386
+ "mean_abs": 0.11255021314656233,
387
+ "max_abs": 3.515625
388
+ },
389
+ "denoiser_step_40": {
390
+ "shape": [
391
+ 1,
392
+ 16384,
393
+ 64
394
+ ],
395
+ "relative_l2": 0.21870793819777393,
396
+ "cosine": 0.9777110682615012,
397
+ "mean_abs": 0.20488777058695185,
398
+ "max_abs": 3.6875
399
+ },
400
+ "latents": {
401
+ "shape": [
402
+ 1,
403
+ 16384,
404
+ 64
405
+ ],
406
+ "relative_l2": 0.15225845610304953,
407
+ "cosine": 0.9888893749028648,
408
+ "mean_abs": 0.11930847777966846,
409
+ "max_abs": 3.2109375
410
+ },
411
+ "prompt": {
412
+ "shape": [
413
+ 1,
414
+ 35,
415
+ 4096
416
+ ],
417
+ "relative_l2": 0.5244983087159049,
418
+ "cosine": 0.8765227567856071,
419
+ "mean_abs": 3.1638517217976707,
420
+ "max_abs": 964.0
421
+ }
422
+ }
423
+ },
424
+ {
425
+ "id": "spatial-first",
426
+ "stages": {
427
+ "denoiser_step_1": {
428
+ "shape": [
429
+ 1,
430
+ 16420,
431
+ 64
432
+ ],
433
+ "relative_l2": 0.07881730250830209,
434
+ "cosine": 0.9970588934798214,
435
+ "mean_abs": 0.14945611470196302,
436
+ "max_abs": 3.3720703125
437
+ },
438
+ "denoiser_step_20": {
439
+ "shape": [
440
+ 1,
441
+ 16384,
442
+ 64
443
+ ],
444
+ "relative_l2": 0.0813246004032852,
445
+ "cosine": 0.9968516527948267,
446
+ "mean_abs": 0.08205001484145447,
447
+ "max_abs": 2.15234375
448
+ },
449
+ "denoiser_step_40": {
450
+ "shape": [
451
+ 1,
452
+ 16384,
453
+ 64
454
+ ],
455
+ "relative_l2": 0.17795529755967465,
456
+ "cosine": 0.9857923173684036,
457
+ "mean_abs": 0.1686608098137361,
458
+ "max_abs": 2.2109375
459
+ },
460
+ "latents": {
461
+ "shape": [
462
+ 1,
463
+ 16384,
464
+ 64
465
+ ],
466
+ "relative_l2": 0.1031416290185419,
467
+ "cosine": 0.9950238962284256,
468
+ "mean_abs": 0.08625367370996173,
469
+ "max_abs": 2.31640625
470
+ },
471
+ "prompt": {
472
+ "shape": [
473
+ 1,
474
+ 36,
475
+ 4096
476
+ ],
477
+ "relative_l2": 0.535208555793446,
478
+ "cosine": 0.8671347939794591,
479
+ "mean_abs": 3.3183139397038355,
480
+ "max_abs": 964.0
481
+ }
482
+ }
483
+ }
484
+ ],
485
+ "repeatability": {
486
+ "bf16": {
487
+ "rows": [
488
+ {
489
+ "id": "a0",
490
+ "rgb_psnr_db": null,
491
+ "exact_pixels": true,
492
+ "alpha_mae": 0.0,
493
+ "stages": {
494
+ "prompt": {
495
+ "exact": true,
496
+ "mae": 0.0,
497
+ "max_abs": 0.0
498
+ },
499
+ "vae_input": {
500
+ "exact": true,
501
+ "mae": 0.0,
502
+ "max_abs": 0.0
503
+ },
504
+ "vae_output": {
505
+ "exact": true,
506
+ "mae": 0.0,
507
+ "max_abs": 0.0
508
+ }
509
+ }
510
+ },
511
+ {
512
+ "id": "a1",
513
+ "rgb_psnr_db": 61.15596749991985,
514
+ "exact_pixels": false,
515
+ "alpha_mae": 0.018485069274902344,
516
+ "stages": {
517
+ "prompt": {
518
+ "exact": true,
519
+ "mae": 0.0,
520
+ "max_abs": 0.0
521
+ },
522
+ "vae_input": {
523
+ "exact": true,
524
+ "mae": 0.0,
525
+ "max_abs": 0.0
526
+ },
527
+ "vae_output": {
528
+ "exact": false,
529
+ "mae": 0.00032036026823334396,
530
+ "max_abs": 0.03759765625
531
+ }
532
+ }
533
+ },
534
+ {
535
+ "id": "a2",
536
+ "rgb_psnr_db": 61.14556238173183,
537
+ "exact_pixels": false,
538
+ "alpha_mae": 0.018454551696777344,
539
+ "stages": {
540
+ "prompt": {
541
+ "exact": true,
542
+ "mae": 0.0,
543
+ "max_abs": 0.0
544
+ },
545
+ "vae_input": {
546
+ "exact": true,
547
+ "mae": 0.0,
548
+ "max_abs": 0.0
549
+ },
550
+ "vae_output": {
551
+ "exact": false,
552
+ "mae": 0.00031989446142688394,
553
+ "max_abs": 0.0255126953125
554
+ }
555
+ }
556
+ },
557
+ {
558
+ "id": "a3",
559
+ "rgb_psnr_db": 61.17045435704394,
560
+ "exact_pixels": false,
561
+ "alpha_mae": 0.018306732177734375,
562
+ "stages": {
563
+ "prompt": {
564
+ "exact": true,
565
+ "mae": 0.0,
566
+ "max_abs": 0.0
567
+ },
568
+ "vae_input": {
569
+ "exact": true,
570
+ "mae": 0.0,
571
+ "max_abs": 0.0
572
+ },
573
+ "vae_output": {
574
+ "exact": false,
575
+ "mae": 0.00031883540214039385,
576
+ "max_abs": 0.0281982421875
577
+ }
578
+ }
579
+ }
580
+ ],
581
+ "interpretation": "Prompt embeddings and denoiser latents must match exactly. Small VAE/postprocessing variations are measured separately."
582
+ },
583
+ "mxfp4": {
584
+ "rows": [
585
+ {
586
+ "id": "a0",
587
+ "rgb_psnr_db": null,
588
+ "exact_pixels": true,
589
+ "alpha_mae": 0.0,
590
+ "stages": {
591
+ "prompt": {
592
+ "exact": true,
593
+ "mae": 0.0,
594
+ "max_abs": 0.0
595
+ },
596
+ "vae_input": {
597
+ "exact": true,
598
+ "mae": 0.0,
599
+ "max_abs": 0.0
600
+ },
601
+ "vae_output": {
602
+ "exact": true,
603
+ "mae": 0.0,
604
+ "max_abs": 0.0
605
+ }
606
+ }
607
+ },
608
+ {
609
+ "id": "a1",
610
+ "rgb_psnr_db": 61.19364488066033,
611
+ "exact_pixels": false,
612
+ "alpha_mae": 0.019402503967285156,
613
+ "stages": {
614
+ "prompt": {
615
+ "exact": true,
616
+ "mae": 0.0,
617
+ "max_abs": 0.0
618
+ },
619
+ "vae_input": {
620
+ "exact": true,
621
+ "mae": 0.0,
622
+ "max_abs": 0.0
623
+ },
624
+ "vae_output": {
625
+ "exact": false,
626
+ "mae": 0.0003149415133520961,
627
+ "max_abs": 0.0205078125
628
+ }
629
+ }
630
+ },
631
+ {
632
+ "id": "a2",
633
+ "rgb_psnr_db": 61.196832096483824,
634
+ "exact_pixels": false,
635
+ "alpha_mae": 0.01945972442626953,
636
+ "stages": {
637
+ "prompt": {
638
+ "exact": true,
639
+ "mae": 0.0,
640
+ "max_abs": 0.0
641
+ },
642
+ "vae_input": {
643
+ "exact": true,
644
+ "mae": 0.0,
645
+ "max_abs": 0.0
646
+ },
647
+ "vae_output": {
648
+ "exact": false,
649
+ "mae": 0.0003153072320856154,
650
+ "max_abs": 0.02734375
651
+ }
652
+ }
653
+ },
654
+ {
655
+ "id": "a3",
656
+ "rgb_psnr_db": 61.205118612289226,
657
+ "exact_pixels": false,
658
+ "alpha_mae": 0.01945781707763672,
659
+ "stages": {
660
+ "prompt": {
661
+ "exact": true,
662
+ "mae": 0.0,
663
+ "max_abs": 0.0
664
+ },
665
+ "vae_input": {
666
+ "exact": true,
667
+ "mae": 0.0,
668
+ "max_abs": 0.0
669
+ },
670
+ "vae_output": {
671
+ "exact": false,
672
+ "mae": 0.0003153429424855858,
673
+ "max_abs": 0.0263671875
674
+ }
675
+ }
676
+ }
677
+ ],
678
+ "interpretation": "Prompt embeddings and denoiser latents must match exactly. Small VAE/postprocessing variations are measured separately."
679
+ }
680
+ }
681
+ }
evaluation/quality-pairs-1.png ADDED

Git LFS Details

  • SHA256: b7c29432908593ba6b2f35da5b3a3dd0fa186793d44087f0d061b674250cd0f3
  • Pointer size: 132 Bytes
  • Size of remote file: 1.87 MB
evaluation/quality-pairs-2.png ADDED

Git LFS Details

  • SHA256: 1c167e6f2f59572808d2116e652514a48044754009d554805aec3bf482fcf983
  • Pointer size: 132 Bytes
  • Size of remote file: 1.73 MB
launch.sh ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ cd -- "$(dirname -- "${BASH_SOURCE[0]}")"
4
+ exec "${QWEN_IMAGE21_PYTHON:-python3}" -m qwen_image21 "$@"
processor/added_tokens.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "</think>": 151668,
3
+ "</tool_call>": 151658,
4
+ "</tool_response>": 151666,
5
+ "<think>": 151667,
6
+ "<tool_call>": 151657,
7
+ "<tool_response>": 151665,
8
+ "<|box_end|>": 151649,
9
+ "<|box_start|>": 151648,
10
+ "<|endoftext|>": 151643,
11
+ "<|file_sep|>": 151664,
12
+ "<|fim_middle|>": 151660,
13
+ "<|fim_pad|>": 151662,
14
+ "<|fim_prefix|>": 151659,
15
+ "<|fim_suffix|>": 151661,
16
+ "<|im_end|>": 151645,
17
+ "<|im_start|>": 151644,
18
+ "<|image_pad|>": 151655,
19
+ "<|object_ref_end|>": 151647,
20
+ "<|object_ref_start|>": 151646,
21
+ "<|quad_end|>": 151651,
22
+ "<|quad_start|>": 151650,
23
+ "<|repo_name|>": 151663,
24
+ "<|video_pad|>": 151656,
25
+ "<|vision_end|>": 151653,
26
+ "<|vision_pad|>": 151654,
27
+ "<|vision_start|>": 151652
28
+ }
processor/chat_template.jinja ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- if tools %}
2
+ {{- '<|im_start|>system\n' }}
3
+ {%- if messages[0].role == 'system' %}
4
+ {%- if messages[0].content is string %}
5
+ {{- messages[0].content }}
6
+ {%- else %}
7
+ {%- for content in messages[0].content %}
8
+ {%- if 'text' in content %}
9
+ {{- content.text }}
10
+ {%- endif %}
11
+ {%- endfor %}
12
+ {%- endif %}
13
+ {{- '\n\n' }}
14
+ {%- endif %}
15
+ {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
16
+ {%- for tool in tools %}
17
+ {{- "\n" }}
18
+ {{- tool | tojson }}
19
+ {%- endfor %}
20
+ {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
21
+ {%- else %}
22
+ {%- if messages[0].role == 'system' %}
23
+ {{- '<|im_start|>system\n' }}
24
+ {%- if messages[0].content is string %}
25
+ {{- messages[0].content }}
26
+ {%- else %}
27
+ {%- for content in messages[0].content %}
28
+ {%- if 'text' in content %}
29
+ {{- content.text }}
30
+ {%- endif %}
31
+ {%- endfor %}
32
+ {%- endif %}
33
+ {{- '<|im_end|>\n' }}
34
+ {%- endif %}
35
+ {%- endif %}
36
+ {%- set image_count = namespace(value=0) %}
37
+ {%- set video_count = namespace(value=0) %}
38
+ {%- for message in messages %}
39
+ {%- if message.role == "user" %}
40
+ {{- '<|im_start|>' + message.role + '\n' }}
41
+ {%- if message.content is string %}
42
+ {{- message.content }}
43
+ {%- else %}
44
+ {%- for content in message.content %}
45
+ {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}
46
+ {%- set image_count.value = image_count.value + 1 %}
47
+ {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}
48
+ <|vision_start|><|image_pad|><|vision_end|>
49
+ {%- elif content.type == 'video' or 'video' in content %}
50
+ {%- set video_count.value = video_count.value + 1 %}
51
+ {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}
52
+ <|vision_start|><|video_pad|><|vision_end|>
53
+ {%- elif 'text' in content %}
54
+ {{- content.text }}
55
+ {%- endif %}
56
+ {%- endfor %}
57
+ {%- endif %}
58
+ {{- '<|im_end|>\n' }}
59
+ {%- elif message.role == "assistant" %}
60
+ {{- '<|im_start|>' + message.role + '\n' }}
61
+ {%- if message.content is string %}
62
+ {{- message.content }}
63
+ {%- else %}
64
+ {%- for content_item in message.content %}
65
+ {%- if 'text' in content_item %}
66
+ {{- content_item.text }}
67
+ {%- endif %}
68
+ {%- endfor %}
69
+ {%- endif %}
70
+ {%- if message.tool_calls %}
71
+ {%- for tool_call in message.tool_calls %}
72
+ {%- if (loop.first and message.content) or (not loop.first) %}
73
+ {{- '\n' }}
74
+ {%- endif %}
75
+ {%- if tool_call.function %}
76
+ {%- set tool_call = tool_call.function %}
77
+ {%- endif %}
78
+ {{- '<tool_call>\n{"name": "' }}
79
+ {{- tool_call.name }}
80
+ {{- '", "arguments": ' }}
81
+ {%- if tool_call.arguments is string %}
82
+ {{- tool_call.arguments }}
83
+ {%- else %}
84
+ {{- tool_call.arguments | tojson }}
85
+ {%- endif %}
86
+ {{- '}\n</tool_call>' }}
87
+ {%- endfor %}
88
+ {%- endif %}
89
+ {{- '<|im_end|>\n' }}
90
+ {%- elif message.role == "tool" %}
91
+ {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
92
+ {{- '<|im_start|>user' }}
93
+ {%- endif %}
94
+ {{- '\n<tool_response>\n' }}
95
+ {%- if message.content is string %}
96
+ {{- message.content }}
97
+ {%- else %}
98
+ {%- for content in message.content %}
99
+ {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}
100
+ {%- set image_count.value = image_count.value + 1 %}
101
+ {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}
102
+ <|vision_start|><|image_pad|><|vision_end|>
103
+ {%- elif content.type == 'video' or 'video' in content %}
104
+ {%- set video_count.value = video_count.value + 1 %}
105
+ {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}
106
+ <|vision_start|><|video_pad|><|vision_end|>
107
+ {%- elif 'text' in content %}
108
+ {{- content.text }}
109
+ {%- endif %}
110
+ {%- endfor %}
111
+ {%- endif %}
112
+ {{- '\n</tool_response>' }}
113
+ {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
114
+ {{- '<|im_end|>\n' }}
115
+ {%- endif %}
116
+ {%- endif %}
117
+ {%- endfor %}
118
+ {%- if add_generation_prompt %}
119
+ {{- '<|im_start|>assistant\n' }}
120
+ {%- endif %}
processor/merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
processor/preprocessor_config.json ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "crop_size": null,
3
+ "data_format": "channels_first",
4
+ "default_to_square": true,
5
+ "device": null,
6
+ "disable_grouping": null,
7
+ "do_center_crop": null,
8
+ "do_convert_rgb": true,
9
+ "do_normalize": true,
10
+ "do_pad": null,
11
+ "do_rescale": true,
12
+ "do_resize": true,
13
+ "image_mean": [
14
+ 0.5,
15
+ 0.5,
16
+ 0.5
17
+ ],
18
+ "image_processor_type": "Qwen2VLImageProcessorFast",
19
+ "image_std": [
20
+ 0.5,
21
+ 0.5,
22
+ 0.5
23
+ ],
24
+ "input_data_format": null,
25
+ "max_pixels": null,
26
+ "merge_size": 2,
27
+ "min_pixels": null,
28
+ "pad_size": null,
29
+ "patch_size": 16,
30
+ "processor_class": "Qwen3VLProcessor",
31
+ "resample": 3,
32
+ "rescale_factor": 0.00392156862745098,
33
+ "return_tensors": null,
34
+ "size": {
35
+ "longest_edge": 16777216,
36
+ "shortest_edge": 65536
37
+ },
38
+ "temporal_patch_size": 2
39
+ }
processor/special_tokens_map.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|im_start|>",
4
+ "<|im_end|>",
5
+ "<|object_ref_start|>",
6
+ "<|object_ref_end|>",
7
+ "<|box_start|>",
8
+ "<|box_end|>",
9
+ "<|quad_start|>",
10
+ "<|quad_end|>",
11
+ "<|vision_start|>",
12
+ "<|vision_end|>",
13
+ "<|vision_pad|>",
14
+ "<|image_pad|>",
15
+ "<|video_pad|>"
16
+ ],
17
+ "eos_token": {
18
+ "content": "<|im_end|>",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ "pad_token": {
25
+ "content": "<|endoftext|>",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ }
31
+ }
processor/tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4
3
+ size 11422654
processor/tokenizer_config.json ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_prefix_space": false,
4
+ "added_tokens_decoder": {
5
+ "151643": {
6
+ "content": "<|endoftext|>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "151644": {
14
+ "content": "<|im_start|>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "151645": {
22
+ "content": "<|im_end|>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ },
29
+ "151646": {
30
+ "content": "<|object_ref_start|>",
31
+ "lstrip": false,
32
+ "normalized": false,
33
+ "rstrip": false,
34
+ "single_word": false,
35
+ "special": true
36
+ },
37
+ "151647": {
38
+ "content": "<|object_ref_end|>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false,
43
+ "special": true
44
+ },
45
+ "151648": {
46
+ "content": "<|box_start|>",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false,
51
+ "special": true
52
+ },
53
+ "151649": {
54
+ "content": "<|box_end|>",
55
+ "lstrip": false,
56
+ "normalized": false,
57
+ "rstrip": false,
58
+ "single_word": false,
59
+ "special": true
60
+ },
61
+ "151650": {
62
+ "content": "<|quad_start|>",
63
+ "lstrip": false,
64
+ "normalized": false,
65
+ "rstrip": false,
66
+ "single_word": false,
67
+ "special": true
68
+ },
69
+ "151651": {
70
+ "content": "<|quad_end|>",
71
+ "lstrip": false,
72
+ "normalized": false,
73
+ "rstrip": false,
74
+ "single_word": false,
75
+ "special": true
76
+ },
77
+ "151652": {
78
+ "content": "<|vision_start|>",
79
+ "lstrip": false,
80
+ "normalized": false,
81
+ "rstrip": false,
82
+ "single_word": false,
83
+ "special": true
84
+ },
85
+ "151653": {
86
+ "content": "<|vision_end|>",
87
+ "lstrip": false,
88
+ "normalized": false,
89
+ "rstrip": false,
90
+ "single_word": false,
91
+ "special": true
92
+ },
93
+ "151654": {
94
+ "content": "<|vision_pad|>",
95
+ "lstrip": false,
96
+ "normalized": false,
97
+ "rstrip": false,
98
+ "single_word": false,
99
+ "special": true
100
+ },
101
+ "151655": {
102
+ "content": "<|image_pad|>",
103
+ "lstrip": false,
104
+ "normalized": false,
105
+ "rstrip": false,
106
+ "single_word": false,
107
+ "special": true
108
+ },
109
+ "151656": {
110
+ "content": "<|video_pad|>",
111
+ "lstrip": false,
112
+ "normalized": false,
113
+ "rstrip": false,
114
+ "single_word": false,
115
+ "special": true
116
+ },
117
+ "151657": {
118
+ "content": "<tool_call>",
119
+ "lstrip": false,
120
+ "normalized": false,
121
+ "rstrip": false,
122
+ "single_word": false,
123
+ "special": false
124
+ },
125
+ "151658": {
126
+ "content": "</tool_call>",
127
+ "lstrip": false,
128
+ "normalized": false,
129
+ "rstrip": false,
130
+ "single_word": false,
131
+ "special": false
132
+ },
133
+ "151659": {
134
+ "content": "<|fim_prefix|>",
135
+ "lstrip": false,
136
+ "normalized": false,
137
+ "rstrip": false,
138
+ "single_word": false,
139
+ "special": false
140
+ },
141
+ "151660": {
142
+ "content": "<|fim_middle|>",
143
+ "lstrip": false,
144
+ "normalized": false,
145
+ "rstrip": false,
146
+ "single_word": false,
147
+ "special": false
148
+ },
149
+ "151661": {
150
+ "content": "<|fim_suffix|>",
151
+ "lstrip": false,
152
+ "normalized": false,
153
+ "rstrip": false,
154
+ "single_word": false,
155
+ "special": false
156
+ },
157
+ "151662": {
158
+ "content": "<|fim_pad|>",
159
+ "lstrip": false,
160
+ "normalized": false,
161
+ "rstrip": false,
162
+ "single_word": false,
163
+ "special": false
164
+ },
165
+ "151663": {
166
+ "content": "<|repo_name|>",
167
+ "lstrip": false,
168
+ "normalized": false,
169
+ "rstrip": false,
170
+ "single_word": false,
171
+ "special": false
172
+ },
173
+ "151664": {
174
+ "content": "<|file_sep|>",
175
+ "lstrip": false,
176
+ "normalized": false,
177
+ "rstrip": false,
178
+ "single_word": false,
179
+ "special": false
180
+ },
181
+ "151665": {
182
+ "content": "<tool_response>",
183
+ "lstrip": false,
184
+ "normalized": false,
185
+ "rstrip": false,
186
+ "single_word": false,
187
+ "special": false
188
+ },
189
+ "151666": {
190
+ "content": "</tool_response>",
191
+ "lstrip": false,
192
+ "normalized": false,
193
+ "rstrip": false,
194
+ "single_word": false,
195
+ "special": false
196
+ },
197
+ "151667": {
198
+ "content": "<think>",
199
+ "lstrip": false,
200
+ "normalized": false,
201
+ "rstrip": false,
202
+ "single_word": false,
203
+ "special": false
204
+ },
205
+ "151668": {
206
+ "content": "</think>",
207
+ "lstrip": false,
208
+ "normalized": false,
209
+ "rstrip": false,
210
+ "single_word": false,
211
+ "special": false
212
+ }
213
+ },
214
+ "additional_special_tokens": [
215
+ "<|im_start|>",
216
+ "<|im_end|>",
217
+ "<|object_ref_start|>",
218
+ "<|object_ref_end|>",
219
+ "<|box_start|>",
220
+ "<|box_end|>",
221
+ "<|quad_start|>",
222
+ "<|quad_end|>",
223
+ "<|vision_start|>",
224
+ "<|vision_end|>",
225
+ "<|vision_pad|>",
226
+ "<|image_pad|>",
227
+ "<|video_pad|>"
228
+ ],
229
+ "bos_token": null,
230
+ "clean_up_tokenization_spaces": false,
231
+ "eos_token": "<|im_end|>",
232
+ "errors": "replace",
233
+ "extra_special_tokens": {},
234
+ "model_max_length": 262144,
235
+ "pad_token": "<|endoftext|>",
236
+ "processor_class": "Qwen3VLProcessor",
237
+ "split_special_tokens": false,
238
+ "tokenizer_class": "Qwen2Tokenizer",
239
+ "unk_token": null
240
+ }
processor/video_preprocessor_config.json ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "crop_size": null,
3
+ "data_format": "channels_first",
4
+ "default_to_square": true,
5
+ "device": null,
6
+ "do_center_crop": null,
7
+ "do_convert_rgb": true,
8
+ "do_normalize": true,
9
+ "do_rescale": true,
10
+ "do_resize": true,
11
+ "do_sample_frames": true,
12
+ "fps": 2,
13
+ "image_mean": [
14
+ 0.5,
15
+ 0.5,
16
+ 0.5
17
+ ],
18
+ "image_std": [
19
+ 0.5,
20
+ 0.5,
21
+ 0.5
22
+ ],
23
+ "input_data_format": null,
24
+ "max_frames": 768,
25
+ "merge_size": 2,
26
+ "min_frames": 4,
27
+ "num_frames": null,
28
+ "pad_size": null,
29
+ "patch_size": 16,
30
+ "processor_class": "Qwen3VLProcessor",
31
+ "resample": 3,
32
+ "rescale_factor": 0.00392156862745098,
33
+ "return_metadata": false,
34
+ "size": {
35
+ "longest_edge": 25165824,
36
+ "shortest_edge": 4096
37
+ },
38
+ "temporal_patch_size": 2,
39
+ "video_metadata": null,
40
+ "video_processor_type": "Qwen3VLVideoProcessor"
41
+ }
processor/vocab.json ADDED
The diff for this file is too large to render. See raw diff
 
qwen_image21/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ """Portable balanced MXFP4 image generation with BF16 framework arithmetic."""
qwen_image21/__main__.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import argparse
2
+ import json
3
+ from pathlib import Path
4
+ import sys
5
+
6
+ def main():
7
+ parser=argparse.ArgumentParser(description="Qwen Image 2.1 MXFP4: local packed image generation")
8
+ parser.add_argument("--model-dir",type=Path,required=True)
9
+ parser.add_argument("--decoder",choices=("auto","framework","native"),default="auto")
10
+ parser.add_argument("--memory-budget-gib",type=float,help="Optional framework allocator cap; does not reserve device memory")
11
+ commands=parser.add_subparsers(dest="command",required=True)
12
+ generate=commands.add_parser("generate")
13
+ generate.add_argument("--prompt",required=True)
14
+ generate.add_argument("--mode",choices=("text-to-image","rgba","edit"),default="text-to-image")
15
+ generate.add_argument("--image",type=Path)
16
+ generate.add_argument("--size",type=int,choices=(1024,2048),default=2048)
17
+ generate.add_argument("--seed",type=int,default=42)
18
+ generate.add_argument("--output",type=Path,required=True)
19
+ serve=commands.add_parser("serve")
20
+ serve.add_argument("--host",default="127.0.0.1")
21
+ serve.add_argument("--port",type=int,default=8191)
22
+ args=parser.parse_args()
23
+ from .runtime import ImageEngine,validate_request
24
+ source=None
25
+ if args.command=="generate":
26
+ from PIL import Image
27
+ if args.output.exists():
28
+ parser.error("Output already exists; choose a new path")
29
+ source=Image.open(args.image) if args.image else None
30
+ validate_request(args.prompt,args.size,args.size,seed=args.seed,mode=args.mode,image=source)
31
+ print("Verifying checkpoint files and loading the GPU pipeline...",file=sys.stderr,flush=True)
32
+ engine=ImageEngine(args.model_dir,memory_budget_gib=args.memory_budget_gib,decoder=args.decoder)
33
+ print(f"Pipeline ready in {engine.load_seconds:.2f} seconds.",file=sys.stderr,flush=True)
34
+ if args.command=="serve":
35
+ from .server import serve
36
+ serve(engine,args.host,args.port)
37
+ else:
38
+ image,png,report=engine.generate(args.prompt,width=args.size,height=args.size,seed=args.seed,mode=args.mode,image=source)
39
+ args.output.parent.mkdir(parents=True,exist_ok=True)
40
+ with args.output.open("xb") as f:
41
+ f.write(png)
42
+ args.output.with_suffix(".json").write_text(json.dumps(report,indent=2)+"\n")
43
+ print(json.dumps(dict(image=str(args.output.resolve()),load_seconds=engine.load_seconds,**report),indent=2))
44
+
45
+ if __name__=="__main__":
46
+ main()
qwen_image21/decoder.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Select the existing allowlisted decoder without importing a GPU framework."""
2
+ import hashlib
3
+ import json
4
+ from pathlib import Path
5
+
6
+
7
+ def select_decoder(architecture, requested, artifact_dir):
8
+ if requested not in ('auto', 'framework', 'native'):
9
+ raise ValueError('decoder must be auto, framework or native')
10
+ if requested == 'framework':
11
+ return None, 'Framework decoder explicitly selected'
12
+ if architecture.split(':', 1)[0] != 'gfx1201':
13
+ if requested == 'native':
14
+ raise ValueError('The supplied native decoder targets gfx1201 only')
15
+ return None, 'Framework decoder selected for ' + architecture
16
+ root = Path(artifact_dir).resolve()
17
+ manifest = root/'manifest.json'
18
+ if not manifest.is_file():
19
+ if requested == 'native':
20
+ raise ValueError('Native decoder manifest is missing')
21
+ return None, 'Native decoder is absent; using the framework decoder'
22
+ row = json.loads(manifest.read_text())
23
+ path = root/row['file']
24
+ if not path.resolve().is_relative_to(root) or row['architecture'] != 'gfx1201' or row.get('abi_version') != 1:
25
+ raise ValueError('Unsupported native decoder manifest')
26
+ with path.open('rb') as f:
27
+ actual = hashlib.file_digest(f, 'sha256').hexdigest()
28
+ if actual != row['sha256']:
29
+ raise ValueError('Native decoder SHA-256 mismatch')
30
+ return path, 'Verified native gfx1201 decoder selected'
qwen_image21/integrity.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Checkpoint verification without importing the inference stack."""
2
+ import hashlib
3
+ import json
4
+ from pathlib import Path
5
+
6
+
7
+ def verify_checkpoint(root):
8
+ root = Path(root).resolve()
9
+ lock = json.loads((root / "checkpoint.lock.json").read_text())
10
+ expected = set()
11
+ for row in lock["files"]:
12
+ path = root / row["file"]
13
+ if (row["file"] in expected or path.is_symlink()
14
+ or not path.resolve().is_relative_to(root)):
15
+ raise ValueError(f"Invalid checkpoint path: {row['file']}")
16
+ expected.add(row["file"])
17
+ if not path.is_file() or path.stat().st_size != row["bytes"]:
18
+ raise ValueError(f"Missing or wrong-size checkpoint file: {row['file']}")
19
+ with path.open("rb") as stream:
20
+ digest = hashlib.file_digest(stream, "sha256").hexdigest()
21
+ if digest != row["sha256"]:
22
+ raise ValueError(f"Checkpoint hash mismatch: {row['file']}")
23
+ actual = {str(p.relative_to(root)) for name in
24
+ ("text_encoder", "transformer", "vae", "processor", "scheduler")
25
+ for p in (root / name).rglob("*") if p.is_file()}
26
+ actual.add("result.json")
27
+ if expected != actual:
28
+ raise ValueError("Unexpected or unlisted checkpoint files")
29
+ return lock
qwen_image21/runtime.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Serialized, bounded image requests using a pinned packed checkpoint."""
2
+ import os
3
+ os.environ.update(MIOPEN_FIND_MODE="FAST",MIOPEN_DEBUG_CONV_GEMM="0",
4
+ MIOPEN_ENABLE_LOGGING="0",MIOPEN_LOG_LEVEL="2",
5
+ HF_HUB_OFFLINE="1",TRANSFORMERS_OFFLINE="1",TORCH_COMPILE_DISABLE="1")
6
+ import fcntl
7
+ import io
8
+ import json
9
+ from pathlib import Path
10
+ import threading
11
+ import time
12
+
13
+ def validate_request(prompt, width=2048, height=2048, steps=40, guidance=1.0,
14
+ seed=42, mode="text-to-image", image=None):
15
+ if not isinstance(prompt,str) or not prompt.strip() or len(prompt)>512:
16
+ raise ValueError("prompt must contain 1 to 512 characters")
17
+ if type(width) is not int or type(height) is not int or width!=height or width not in (1024,2048):
18
+ raise ValueError("Qualified sizes are 1024x1024 and 2048x2048, batch one")
19
+ if type(steps) is not int or steps!=40 or type(guidance) not in (int,float) or guidance!=1.0:
20
+ raise ValueError("This profile requires 40 steps and guidance 1.0")
21
+ if type(seed) is not int or not 0<=seed<2**63:
22
+ raise ValueError("seed must be an integer in [0, 2**63)")
23
+ if mode not in ("text-to-image","rgba","edit"):
24
+ raise ValueError("mode must be text-to-image, rgba or edit")
25
+ if mode=="edit":
26
+ if image is None or width!=1024:
27
+ raise ValueError("Editing requires one input image and 1024x1024 output")
28
+ if image.width*image.height>2048*2048:
29
+ raise ValueError("Edit input is limited to 4,194,304 pixels")
30
+ elif image is not None:
31
+ raise ValueError("Input images are accepted only for edit requests")
32
+ return dict(width=width,height=height,output_resolution=width,num_inference_steps=steps,
33
+ true_cfg_scale=guidance,use_kv_cache=True)
34
+
35
+ class ImageEngine:
36
+ def __init__(self,model_dir,memory_budget_gib=None,verify=True,decoder="auto"):
37
+ import math
38
+ import importlib.metadata as metadata
39
+ from .weights import load_pipeline,sha256
40
+ from .integrity import verify_checkpoint
41
+ import torch
42
+ self.model_dir=Path(model_dir).resolve()
43
+ # Cooperating workers can select a shared lock for their physical device.
44
+ device_key=os.environ.get("HIP_VISIBLE_DEVICES",os.environ.get("ROCR_VISIBLE_DEVICES","0")).split(",")[0]
45
+ lock_path=os.environ.get("QWEN_IMAGE21_GPU_LOCK",f"/tmp/qwen-image21-{os.getuid()}-gpu-{device_key}.lock")
46
+ self._gpu_lock=open(lock_path,"a")
47
+ try:
48
+ fcntl.flock(self._gpu_lock,fcntl.LOCK_EX|fcntl.LOCK_NB)
49
+ if not torch.cuda.is_available() or not torch.version.hip:
50
+ raise RuntimeError("A supported ROCm PyTorch build and AMD GPU are required")
51
+ if not torch.cuda.is_bf16_supported():
52
+ raise RuntimeError("This BF16 activation profile requires BF16 GPU support")
53
+ props=torch.cuda.get_device_properties(0)
54
+ free,total=torch.cuda.mem_get_info()
55
+ if memory_budget_gib is not None:
56
+ if not math.isfinite(memory_budget_gib) or not 0 < memory_budget_gib <= total/2**30:
57
+ raise ValueError("memory-budget-gib must be positive and no greater than physical VRAM")
58
+ torch.cuda.set_per_process_memory_fraction(memory_budget_gib*2**30/total)
59
+ begin=time.perf_counter()
60
+ if verify:
61
+ verify_checkpoint(self.model_dir)
62
+ self.checkpoint_sha256=sha256(self.model_dir/"result.json")
63
+ from .decoder import select_decoder
64
+ from .weights import enable_native_unpack,disable_native_unpack
65
+ native_path,self.decoder_selection_reason=select_decoder(
66
+ props.gcnArchName,decoder,Path(__file__).resolve().parent.parent/"artifacts")
67
+ disable_native_unpack()
68
+ self.backend="framework"
69
+ if native_path is not None:
70
+ try:
71
+ enable_native_unpack(native_path)
72
+ except OSError as error:
73
+ if decoder == "native":
74
+ raise
75
+ self.decoder_selection_reason=f"Native library unavailable ({error}); using framework decoder"
76
+ else:
77
+ self.backend="native-unpack"
78
+ self.busy=threading.Lock()
79
+ torch.set_num_threads(4)
80
+ self.hardware=dict(name=props.name,architecture=props.gcnArchName,
81
+ total_memory_bytes=total,free_before_load_bytes=free,torch=torch.__version__,
82
+ hip=torch.version.hip,memory_budget_gib=memory_budget_gib,
83
+ packages={key:metadata.version(key) for key in
84
+ ("diffusers","transformers","accelerate","safetensors","Pillow","numpy")})
85
+ # All checkpoint files have already been verified, including tokenizers.
86
+ self.pipeline=load_pipeline(self.model_dir,self.model_dir,verify_hashes=False)
87
+ torch.cuda.synchronize()
88
+ self.load_seconds=time.perf_counter()-begin
89
+ except BaseException:
90
+ self._gpu_lock.close()
91
+ raise
92
+ self.stream=torch.cuda.Stream()
93
+ self.stream.wait_stream(torch.cuda.current_stream())
94
+ self.request_count=0
95
+ self._prefix_caches=[]
96
+ def remember_prefix(module,args,kwargs):
97
+ cache=kwargs.get("kv_cache")
98
+ if cache is not None and all(cache is not old for old in self._prefix_caches):
99
+ self._prefix_caches.append(cache)
100
+ self.pipeline.transformer.register_forward_pre_hook(remember_prefix,with_kwargs=True)
101
+
102
+ def _release_prefix(self):
103
+ for cache in self._prefix_caches:
104
+ for layer in cache.layer_caches:
105
+ layer.k=layer.v=None
106
+ self._prefix_caches.clear()
107
+
108
+ def generate(self,prompt,width=2048,height=2048,steps=40,guidance=1.0,seed=42,
109
+ mode="text-to-image",image=None):
110
+ import torch
111
+ settings=validate_request(prompt,width,height,steps,guidance,seed,mode,image)
112
+ if not self.busy.acquire(blocking=False):
113
+ raise RuntimeError("The single-request GPU worker is busy")
114
+ started=time.perf_counter()
115
+ stop=threading.Event()
116
+ samples=[]
117
+ def sample():
118
+ while not stop.is_set():
119
+ free,total=torch.cuda.mem_get_info()
120
+ samples.append(total-free)
121
+ stop.wait(.02)
122
+ monitor=threading.Thread(target=sample,daemon=True)
123
+ actual_prompt=prompt
124
+ if mode=="rgba":
125
+ actual_prompt="This is an RGBA image with transparency. "+prompt+" The image has alpha channel and the background is transparent."
126
+ try:
127
+ self._release_prefix()
128
+ torch.cuda.reset_peak_memory_stats()
129
+ monitor.start()
130
+ def callback(pipe,step,timestep,values):
131
+ if step==39:
132
+ self._release_prefix()
133
+ return values
134
+ kwargs={"image":image.convert("RGBA")} if image is not None else {}
135
+ with torch.cuda.stream(self.stream),torch.inference_mode():
136
+ result=self.pipeline(prompt=actual_prompt,**settings,**kwargs,
137
+ generator=torch.Generator("cuda").manual_seed(seed),callback_on_step_end=callback).images[0]
138
+ self.stream.synchronize()
139
+ seconds=time.perf_counter()-started
140
+ assert result.size==(width,height) and result.mode=="RGBA"
141
+ buffer=io.BytesIO()
142
+ result.save(buffer,format="PNG")
143
+ row=dict(mode=mode,seed=seed,settings=settings,backend=self.backend,
144
+ decoder_selection_reason=self.decoder_selection_reason,
145
+ checkpoint_sha256=self.checkpoint_sha256,request_index=self.request_count,hardware=self.hardware,
146
+ complete_request_to_pil_seconds=seconds,complete_request_to_png_seconds=time.perf_counter()-started,
147
+ peak_allocated_bytes=torch.cuda.max_memory_allocated(),peak_reserved_bytes=torch.cuda.max_memory_reserved(),
148
+ sampled_peak_device_bytes=max(samples,default=0),sampling_interval_seconds=.02,
149
+ stream="dedicated non-default HIP stream",alpha_extrema=list(result.getextrema()[3]),
150
+ alpha_below_128_fraction=sum(result.getchannel("A").histogram()[:128])/(width*height))
151
+ self.request_count+=1
152
+ return result,buffer.getvalue(),row
153
+ finally:
154
+ stop.set()
155
+ if monitor.is_alive():
156
+ monitor.join(timeout=1)
157
+ self._release_prefix()
158
+ self.busy.release()
qwen_image21/server.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Local JSON image API. One GPU request at a time; no URL/file fetching."""
2
+ import base64
3
+ import binascii
4
+ from http.server import BaseHTTPRequestHandler,ThreadingHTTPServer
5
+ import io
6
+ import json
7
+ import time
8
+ from PIL import Image,UnidentifiedImageError
9
+
10
+ def serve(engine,host,port):
11
+ class Handler(BaseHTTPRequestHandler):
12
+ def send_json(self,status,value):
13
+ payload=json.dumps(value).encode()
14
+ self.send_response(status)
15
+ self.send_header("Content-Type","application/json")
16
+ self.send_header("Content-Length",str(len(payload)))
17
+ self.end_headers()
18
+ self.wfile.write(payload)
19
+
20
+ def do_GET(self):
21
+ if self.path=="/health":
22
+ self.send_json(200,dict(status="ready",busy=engine.busy.locked(),backend=engine.backend,
23
+ checkpoint_sha256=engine.checkpoint_sha256,load_seconds=engine.load_seconds,hardware=engine.hardware))
24
+ elif self.path=="/v1/models":
25
+ self.send_json(200,dict(object="list",data=[dict(id="paiton-image-2.1-uncensored",object="model",
26
+ owned_by="EliovpAI",tasks=["text-to-image","rgba","edit"],batch_size=1,
27
+ generation_sizes=["1024x1024","2048x2048"],rgba_sizes=["1024x1024","2048x2048"],
28
+ edit_sizes=["1024x1024"],steps=40,guidance=1.0)]))
29
+ else:
30
+ self.send_json(404,dict(error="Unknown endpoint"))
31
+
32
+ def do_POST(self):
33
+ if self.path not in ("/v1/images/generations","/v1/images/edits"):
34
+ self.send_json(404,dict(error="Unknown endpoint"));return
35
+ try:
36
+ length=int(self.headers.get("Content-Length","0"))
37
+ if not 0<length<=32*2**20:
38
+ raise ValueError("JSON request must be at most 32 MiB")
39
+ body=json.loads(self.rfile.read(length))
40
+ if not isinstance(body,dict):
41
+ raise ValueError("JSON body must be an object")
42
+ allowed={"prompt","size","seed","mode","image_b64","n","model","steps","guidance","response_format"}
43
+ if set(body)-allowed:
44
+ raise ValueError("Unsupported fields: "+", ".join(sorted(set(body)-allowed)))
45
+ if type(body.get("n",1)) is not int or body.get("n",1)!=1 or body.get("model","paiton-image-2.1-uncensored")!="paiton-image-2.1-uncensored":
46
+ raise ValueError("Use model paiton-image-2.1-uncensored and n=1")
47
+ if body.get("response_format","b64_json")!="b64_json":
48
+ raise ValueError("response_format must be b64_json")
49
+ size=body.get("size","2048x2048")
50
+ if size not in ("1024x1024","2048x2048"):
51
+ raise ValueError("Unsupported size")
52
+ width,height=map(int,size.split("x"))
53
+ source=None
54
+ mode=body.get("mode","text-to-image")
55
+ if self.path.endswith("/edits"):
56
+ mode="edit"
57
+ data=base64.b64decode(body.get("image_b64",""),validate=True)
58
+ source=Image.open(io.BytesIO(data))
59
+ if source.width*source.height>2048*2048:
60
+ raise ValueError("Edit input exceeds 4,194,304 pixels")
61
+ source.load()
62
+ elif "image_b64" in body:
63
+ raise ValueError("Use the edits endpoint for input images")
64
+ image,png,report=engine.generate(body.get("prompt"),width=width,height=height,
65
+ steps=body.get("steps",40),guidance=body.get("guidance",1.0),seed=body.get("seed",42),mode=mode,image=source)
66
+ self.send_json(200,dict(created=int(time.time()),data=[dict(b64_json=base64.b64encode(png).decode())],metrics=report))
67
+ except (ValueError,TypeError,UnidentifiedImageError,Image.DecompressionBombError,binascii.Error) as error:
68
+ self.send_json(400,dict(error=str(error)))
69
+ except RuntimeError as error:
70
+ self.send_json(409 if "busy" in str(error) else 500,dict(error=str(error)))
71
+ server=ThreadingHTTPServer((host,port),Handler)
72
+ server.daemon_threads=True
73
+ print(f"READY http://{host}:{port}; checkpoint {engine.checkpoint_sha256}",flush=True)
74
+ server.serve_forever()
qwen_image21/weights.py ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Isolated external reference consumer for Quark MXFP4 weights.
2
+
3
+ This consumer reconstructs a BF16 matrix for each operation. It does not claim
4
+ native MXFP4 GEMM, compiler integration, or an inference speedup.
5
+ """
6
+ import hashlib
7
+ import ctypes
8
+ import json
9
+ import math
10
+ from pathlib import Path
11
+
12
+ import torch
13
+ from accelerate import init_empty_weights
14
+ from safetensors import safe_open
15
+
16
+ E2M1 = [0,.5,1,1.5,2,3,4,6,-0.,-.5,-1,-1.5,-2,-3,-4,-6]
17
+ _NATIVE_UNPACK = None
18
+ _NATIVE_LIBRARY = None
19
+
20
+ def enable_native_unpack(path):
21
+ """Raw-pointer C ABI adapter; native library has no framework dependency."""
22
+ global _NATIVE_UNPACK,_NATIVE_LIBRARY
23
+ _NATIVE_LIBRARY=ctypes.CDLL(str(Path(path).resolve()))
24
+ _NATIVE_UNPACK=_NATIVE_LIBRARY.paiton_mxfp4_unpack
25
+ _NATIVE_UNPACK.argtypes=[ctypes.c_void_p,ctypes.c_void_p,ctypes.c_void_p,ctypes.c_size_t,ctypes.c_void_p]
26
+ _NATIVE_UNPACK.restype=ctypes.c_int
27
+
28
+ def disable_native_unpack():
29
+ global _NATIVE_UNPACK,_NATIVE_LIBRARY
30
+ _NATIVE_UNPACK=None
31
+ _NATIVE_LIBRARY=None
32
+
33
+ def sha256(path):
34
+ h = hashlib.sha256()
35
+ with Path(path).open("rb") as f:
36
+ for data in iter(lambda:f.read(8*1024*1024),b""):
37
+ h.update(data)
38
+ return h.hexdigest()
39
+
40
+ def decode_matrix(weight, scale, columns, lookup):
41
+ rows = weight.shape[0]
42
+ padded = weight.shape[1]*2
43
+ if _NATIVE_UNPACK is not None:
44
+ assert weight.is_cuda and weight.is_contiguous() and scale.is_contiguous()
45
+ out=torch.empty((rows,padded),device=weight.device,dtype=torch.bfloat16)
46
+ rc=_NATIVE_UNPACK(weight.data_ptr(),scale.data_ptr(),out.data_ptr(),out.numel(),
47
+ torch.cuda.current_stream(weight.device).cuda_stream)
48
+ if rc:
49
+ raise RuntimeError(f"Native unpack failed with HIP status {rc}")
50
+ # Match the reference BF16 conversion's compact layout after padding
51
+ # removal. A strided convolution weight can select different arithmetic.
52
+ return out[:,:columns].contiguous()
53
+ codes = torch.stack((weight & 15, weight >> 4), dim=-1).reshape(rows,padded)
54
+ decoded = lookup[codes.long()].reshape(rows,padded//32,32)
55
+ decoded = decoded * torch.exp2(scale.float()-127).unsqueeze(-1)
56
+ return decoded.reshape(rows,padded)[:,:columns].to(torch.bfloat16)
57
+
58
+ class PackedWeightMixin:
59
+ @property
60
+ def weight(self):
61
+ cached=self.__dict__.get("_materialized_weight")
62
+ if cached is not None:
63
+ return cached
64
+ shape = self._original_weight_shape
65
+ return decode_matrix(self._packed_weight,self._packed_scale,
66
+ math.prod(shape[1:]),self._mxfp4_lookup).reshape(shape)
67
+
68
+ class PackedEmbeddingMixin(PackedWeightMixin):
69
+ def forward(self, indices):
70
+ assert self.max_norm is None, "MXFP4 embedding max_norm is unsupported"
71
+ flat = indices.reshape(-1)
72
+ weight = self._packed_weight.index_select(0,flat)
73
+ scale = self._packed_scale.index_select(0,flat)
74
+ value = decode_matrix(weight,scale,self.embedding_dim,self._mxfp4_lookup)
75
+ return value.reshape(*indices.shape,self.embedding_dim)
76
+
77
+ _TYPES = {}
78
+
79
+ def install_packed(module, row, weight, scale, device):
80
+ shape = tuple(row["shape"])
81
+ padded = tuple(row["padded_shape"])
82
+ assert tuple(module.weight.shape) == shape
83
+ assert weight.dtype == scale.dtype == torch.uint8
84
+ assert tuple(weight.shape) == (shape[0],padded[1]//2)
85
+ assert tuple(scale.shape) == (shape[0],padded[1]//32)
86
+ assert row["kind"] in ("linear","embedding","conv2d","conv3d")
87
+ old_type = type(module)
88
+ mixin = PackedEmbeddingMixin if row["kind"] == "embedding" else PackedWeightMixin
89
+ pair = (mixin,old_type)
90
+ if pair not in _TYPES:
91
+ _TYPES[pair] = type("MXFP4"+old_type.__name__,(mixin,old_type),{})
92
+ del module._parameters["weight"]
93
+ module.__class__ = _TYPES[pair]
94
+ module._original_weight_shape = shape
95
+ module.register_buffer("_packed_weight",weight.to(device))
96
+ module.register_buffer("_packed_scale",scale.to(device))
97
+ module.register_buffer("_mxfp4_lookup",torch.tensor(E2M1,dtype=torch.float32,device=device),persistent=False)
98
+
99
+ def load_component(snapshot, bundle, name, device="cuda", quantized=True, verify_hashes=False, event=None):
100
+ from diffusers import QwenImage21Transformer2DModel, AutoencoderKLQwenImage21
101
+ from transformers import Qwen3VLConfig, Qwen3VLForConditionalGeneration
102
+ snapshot, bundle = Path(snapshot), Path(bundle)
103
+ manifest = json.loads((bundle/"result.json").read_text())
104
+ assert manifest["status"] == "completed_conversion_only"
105
+ assert manifest["format"] == "paiton-research-mxfp4-weight-only-v2"
106
+ with init_empty_weights(include_buffers=False):
107
+ if name == "text_encoder":
108
+ config = Qwen3VLConfig.from_pretrained(str(snapshot/name),local_files_only=True)
109
+ config.dtype = torch.bfloat16
110
+ model = Qwen3VLForConditionalGeneration(config)
111
+ else:
112
+ cls = QwenImage21Transformer2DModel if name=="transformer" else AutoencoderKLQwenImage21
113
+ model = cls.from_config(cls.load_config(str(snapshot/name)))
114
+ expected = {k:tuple(p.shape) for k,p in model.named_parameters()}
115
+ loaded = set()
116
+ meta = manifest["components"][name]
117
+ if quantized:
118
+ assert sha256(bundle/name/"config.json") == meta["config_sha256"]
119
+ assert sha256(snapshot/name/"config.json") == meta["config_sha256"]
120
+ targets = {x["name"]+".weight":x for x in meta["converted_layers"]}
121
+ paths = [bundle/name/x["file"] for x in meta["files"]]
122
+ if verify_hashes:
123
+ for path,row in zip(paths,meta["files"]):
124
+ assert path.stat().st_size == row["bytes"] and sha256(path)==row["sha256"],path
125
+ else:
126
+ targets = {}
127
+ paths = sorted((snapshot/name).glob("*.safetensors"))
128
+ for path in paths:
129
+ with safe_open(path,framework="pt",device="cpu") as f:
130
+ for key in sorted(f.keys()):
131
+ if key.endswith(".weight_scale"):
132
+ continue
133
+ assert key in expected and key not in loaded,key
134
+ value = f.get_tensor(key)
135
+ if key in targets:
136
+ row = targets[key]
137
+ install_packed(model.get_submodule(row["name"]),row,value,
138
+ f.get_tensor(row["name"]+".weight_scale"),device)
139
+ else:
140
+ assert tuple(value.shape) == expected[key],key
141
+ parent,leaf = key.rsplit(".",1)
142
+ setattr(model.get_submodule(parent),leaf,torch.nn.Parameter(
143
+ value.to(device=device,dtype=torch.bfloat16),requires_grad=False))
144
+ loaded.add(key)
145
+ del value
146
+ if event:
147
+ event("loaded_shard",component=name,file=path.name,tensors=len(loaded))
148
+ assert loaded == set(expected),sorted(set(expected)-loaded)
149
+ for module in model.modules():
150
+ for key,value in module._buffers.items():
151
+ if value is not None:
152
+ assert not value.is_meta,key
153
+ module._buffers[key] = value.to(device)
154
+ assert not any(p.is_meta for p in model.parameters())
155
+ model.eval()
156
+ payload = sum(t.numel()*t.element_size() for t in model.state_dict().values())
157
+ assert payload == (meta["tensor_payload_bytes"] if quantized else meta["source_bf16_bytes"]),(name,payload)
158
+ assert model.dtype == torch.bfloat16,(name,model.dtype)
159
+ if event:
160
+ event("component_loaded",component=name,quantized=quantized,tensor_payload_bytes=payload)
161
+ return model
162
+
163
+ def remove_single_frame_temporal_caches(vae):
164
+ def decode_hook(module,args,kwargs):
165
+ assert args[0].ndim == 5 and args[0].shape[2] == 1
166
+ assert kwargs["first_chunk"] is True
167
+ return args,dict(kwargs,feat_cache=None)
168
+ def encode_hook(module,args,kwargs):
169
+ assert args[0].ndim == 5 and args[0].shape[2] == 1
170
+ return args,dict(kwargs,feat_cache=None)
171
+ vae.decoder.register_forward_pre_hook(decode_hook,with_kwargs=True)
172
+ vae.encoder.register_forward_pre_hook(encode_hook,with_kwargs=True)
173
+
174
+ def load_pipeline(snapshot,bundle,quantized_components=("text_encoder","transformer","vae"),
175
+ device="cuda",verify_hashes=False,event=None):
176
+ from diffusers import QwenImage21Pipeline,FlowMatchEulerDiscreteScheduler
177
+ from transformers import Qwen3VLProcessor
178
+ snapshot = Path(snapshot)
179
+ components = {name:load_component(snapshot,bundle,name,device,name in quantized_components,verify_hashes,event)
180
+ for name in ("text_encoder","transformer","vae")}
181
+ pipe = QwenImage21Pipeline(
182
+ **components,
183
+ scheduler=FlowMatchEulerDiscreteScheduler.from_pretrained(str(snapshot/"scheduler"),local_files_only=True),
184
+ processor=Qwen3VLProcessor.from_pretrained(str(snapshot/"processor"),local_files_only=True))
185
+ remove_single_frame_temporal_caches(pipe.vae)
186
+ assert not pipe.vae.use_tiling
187
+ return pipe
release-manifest.json ADDED
@@ -0,0 +1,475 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "EliovpAI/Qwen_Image-2.1-Uncensored-MXFP4-Paiton",
3
+ "files": [
4
+ {
5
+ "file": ".gitattributes",
6
+ "bytes": 202,
7
+ "sha256": "21b79beb002c111190b80a2f35c99c62797ec56866db77a737229b6470ceff05"
8
+ },
9
+ {
10
+ "file": "LICENSE",
11
+ "bytes": 7831,
12
+ "sha256": "8dc973f024ff95966bea25866efa443fd16776dcb1001e681e3d467ea572b28d"
13
+ },
14
+ {
15
+ "file": "LICENSES/Apache-2.0.txt",
16
+ "bytes": 11357,
17
+ "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4"
18
+ },
19
+ {
20
+ "file": "NOTICE",
21
+ "bytes": 1129,
22
+ "sha256": "d806b541b79b1a95f892141d0e665bd0982e63ec716e892111bf719bbfc1dce1"
23
+ },
24
+ {
25
+ "file": "README.md",
26
+ "bytes": 7682,
27
+ "sha256": "6ab0bf7e70c611034ba540463556a22c5afbda8e9565c3e9b99088a8116ae948"
28
+ },
29
+ {
30
+ "file": "artifacts/NOTICE",
31
+ "bytes": 428,
32
+ "sha256": "5234653975a6c666fa95ecd11ab5a1d8b89bea1a140401a7a5b3977de4f557a6"
33
+ },
34
+ {
35
+ "file": "artifacts/manifest.json",
36
+ "bytes": 796,
37
+ "sha256": "d70c0b019111895436ad73d5e8347e52f0be638e77a502367c6ef2e600fcf9f1"
38
+ },
39
+ {
40
+ "file": "artifacts/mxfp4_weights_gfx1201.so",
41
+ "bytes": 21032,
42
+ "sha256": "8f8943e4161a71aa786ff5c570e82ffe02324aedfdeb71757109f08773708027"
43
+ },
44
+ {
45
+ "file": "checkpoint.lock.json",
46
+ "bytes": 11245,
47
+ "sha256": "d1e654230017cee6b141fb6cce1b8b8cb4dedf925ced8deb6c75a04ec48e6dbb"
48
+ },
49
+ {
50
+ "file": "environment.lock.json",
51
+ "bytes": 1885,
52
+ "sha256": "236ef4ee9b564de3e120aea40452eddb53adcf111eb4beb9bb183c2f67cfeffe"
53
+ },
54
+ {
55
+ "file": "evaluation/mi355-correctness.json",
56
+ "bytes": 61021,
57
+ "sha256": "c2d93f61d11706dd7fce2739e532780aac00632fe64d30c207e3f0cb3444a577"
58
+ },
59
+ {
60
+ "file": "evaluation/numerical.json",
61
+ "bytes": 16855,
62
+ "sha256": "0f42c2c5a3558f455e44e39fb129a65971c485b10af3a6ef5e142226d55c147d"
63
+ },
64
+ {
65
+ "file": "evaluation/quality-pairs-1.png",
66
+ "bytes": 1873907,
67
+ "sha256": "b7c29432908593ba6b2f35da5b3a3dd0fa186793d44087f0d061b674250cd0f3"
68
+ },
69
+ {
70
+ "file": "evaluation/quality-pairs-2.png",
71
+ "bytes": 1726541,
72
+ "sha256": "1c167e6f2f59572808d2116e652514a48044754009d554805aec3bf482fcf983"
73
+ },
74
+ {
75
+ "file": "launch.sh",
76
+ "bytes": 140,
77
+ "sha256": "c7d2ec15a2d59d89818df56e51967139f94922c90ffd2d71b9be3893d69f1851"
78
+ },
79
+ {
80
+ "file": "processor/added_tokens.json",
81
+ "bytes": 707,
82
+ "sha256": "c0284b582e14987fbd3d5a2cb2bd139084371ed9acbae488829a1c900833c680"
83
+ },
84
+ {
85
+ "file": "processor/chat_template.jinja",
86
+ "bytes": 5292,
87
+ "sha256": "3636d0f0bd6bef02654cdffdc447b79cb2cef8ab02cc75267345946291a489e4"
88
+ },
89
+ {
90
+ "file": "processor/merges.txt",
91
+ "bytes": 1671853,
92
+ "sha256": "8831e4f1a044471340f7c0a83d7bd71306a5b867e95fd870f74d0c5308a904d5"
93
+ },
94
+ {
95
+ "file": "processor/preprocessor_config.json",
96
+ "bytes": 782,
97
+ "sha256": "93585062a80db5e8ca038efc7726a3e6411d9db948472d81d63c6303993be8c5"
98
+ },
99
+ {
100
+ "file": "processor/special_tokens_map.json",
101
+ "bytes": 613,
102
+ "sha256": "76862e765266b85aa9459767e33cbaf13970f327a0e88d1c65846c2ddd3a1ecd"
103
+ },
104
+ {
105
+ "file": "processor/tokenizer.json",
106
+ "bytes": 11422654,
107
+ "sha256": "aeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4"
108
+ },
109
+ {
110
+ "file": "processor/tokenizer_config.json",
111
+ "bytes": 5445,
112
+ "sha256": "81ec7bb9530159b326c0bef1d0b6c33d392090524014ea3f0123a3c1eb9c2af5"
113
+ },
114
+ {
115
+ "file": "processor/video_preprocessor_config.json",
116
+ "bytes": 817,
117
+ "sha256": "59c5c9eb52182eb14c06ffb10ca9effd29adce5f238a95de23ca14a38dbd2cb1"
118
+ },
119
+ {
120
+ "file": "processor/vocab.json",
121
+ "bytes": 2776833,
122
+ "sha256": "ca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910"
123
+ },
124
+ {
125
+ "file": "qwen_image21/__init__.py",
126
+ "bytes": 79,
127
+ "sha256": "90fc1118f1c837ab77964f6731716aa5cbddca0ec5aafa7b8abfc2b4f5ea7871"
128
+ },
129
+ {
130
+ "file": "qwen_image21/__main__.py",
131
+ "bytes": 2449,
132
+ "sha256": "415ccfee9a03853f2100de3f8d70a6f6eb2c04e5b80dc3ca6de3549a87fe76ff"
133
+ },
134
+ {
135
+ "file": "qwen_image21/decoder.py",
136
+ "bytes": 1431,
137
+ "sha256": "3b07284f4dd38ad990a47091c15f3379a1d22bc8bf2e9539e31c22fa540d3d10"
138
+ },
139
+ {
140
+ "file": "qwen_image21/integrity.py",
141
+ "bytes": 1271,
142
+ "sha256": "7d53a504ee78be001b802e761341d99fd1ed5307b662fa571cea6ec4ada24e49"
143
+ },
144
+ {
145
+ "file": "qwen_image21/runtime.py",
146
+ "bytes": 8675,
147
+ "sha256": "7fc2e7658054a5cf09f72fb744580d54bec9ba33d739aae4d0b3ffc0be2e1997"
148
+ },
149
+ {
150
+ "file": "qwen_image21/server.py",
151
+ "bytes": 4334,
152
+ "sha256": "a7cd405fbe8a6831aaacfad4692201154f414b4555c44549480d22b36bab2808"
153
+ },
154
+ {
155
+ "file": "qwen_image21/weights.py",
156
+ "bytes": 8983,
157
+ "sha256": "1e2d0a0fbac1f127a2b4857500b5bbd36a110f56699da9cae9a934de1b637987"
158
+ },
159
+ {
160
+ "file": "requirements-mi355.lock.txt",
161
+ "bytes": 1035,
162
+ "sha256": "df652384ae77f70dc28b190b44db26cefcb36ea84988bd64b2ca17052c700f4b"
163
+ },
164
+ {
165
+ "file": "requirements.txt",
166
+ "bytes": 275,
167
+ "sha256": "d72e2985b60446d42308df4481398ee4723d3d2122ff89546885660692d89baf"
168
+ },
169
+ {
170
+ "file": "result.json",
171
+ "bytes": 250167,
172
+ "sha256": "7d0ccb072548700c0e8f8989eb1d9999a4995c0a71a7734de3be081abe3e4f89"
173
+ },
174
+ {
175
+ "file": "scheduler/scheduler_config.json",
176
+ "bytes": 485,
177
+ "sha256": "5895f3a167c14a967fe9ac70c64924ae5acc79799e0679fd12907e594a713cd1"
178
+ },
179
+ {
180
+ "file": "tests/test_decoder_selection.py",
181
+ "bytes": 1538,
182
+ "sha256": "11e18bc5001177214b2c63f5799b6ac75583cb43c639d866bf52f5981e58324b"
183
+ },
184
+ {
185
+ "file": "text_encoder/config.json",
186
+ "bytes": 1517,
187
+ "sha256": "6001331949f7f86ab6d791a80b12246d4f8da5159fa08c3e62368a39f36d63a9"
188
+ },
189
+ {
190
+ "file": "text_encoder/weights-00001.safetensors",
191
+ "bytes": 330613160,
192
+ "sha256": "f4da6dc292c0a961d74a02dd076d24aee3f38289c7f250c8727d298a86cf0d80"
193
+ },
194
+ {
195
+ "file": "text_encoder/weights-00002.safetensors",
196
+ "bytes": 202806640,
197
+ "sha256": "6683ed125cbeb40d6a00216f64e549d1ce36a766f972c57c8c5686550f26f7d3"
198
+ },
199
+ {
200
+ "file": "text_encoder/weights-00003.safetensors",
201
+ "bytes": 205035120,
202
+ "sha256": "2df7f765d32ef69481f97034f21d344ac9c251fc6a7dbcdcc016e2c4e6b0f5ac"
203
+ },
204
+ {
205
+ "file": "text_encoder/weights-00004.safetensors",
206
+ "bytes": 205035120,
207
+ "sha256": "bbe642ee7e8e3370f9a0445ba5207bfebee202ea25676e7232d1e44038de3c5c"
208
+ },
209
+ {
210
+ "file": "text_encoder/weights-00005.safetensors",
211
+ "bytes": 202756768,
212
+ "sha256": "c42fca1cc6c1a8ee0e92b0a840faf95e91f8d0852d79d2d81c29869f7cea3a7b"
213
+ },
214
+ {
215
+ "file": "text_encoder/weights-00006.safetensors",
216
+ "bytes": 182434800,
217
+ "sha256": "17df5a53455f78da82104741e906359a5b4eabf697fc4a9294b0891874e9c9c7"
218
+ },
219
+ {
220
+ "file": "text_encoder/weights-00007.safetensors",
221
+ "bytes": 202806672,
222
+ "sha256": "309c016ee140abadb50393412c2fd2c2c1d895edfa52ee15bffffbd92d5b5963"
223
+ },
224
+ {
225
+ "file": "text_encoder/weights-00008.safetensors",
226
+ "bytes": 205035152,
227
+ "sha256": "0463a92fa87a14f70b70019c544e92741e63061b4120a0bb219e5cf219d415c3"
228
+ },
229
+ {
230
+ "file": "text_encoder/weights-00009.safetensors",
231
+ "bytes": 205035152,
232
+ "sha256": "14d947a8fa186cae770ea124dffd752b6bfd3a36b3ebd87d904699832c258189"
233
+ },
234
+ {
235
+ "file": "text_encoder/weights-00010.safetensors",
236
+ "bytes": 205035152,
237
+ "sha256": "1b0fb642ff474d93d8fe0a4f0d99d577b4ac4311a4c84cde0a88b16c94b3379a"
238
+ },
239
+ {
240
+ "file": "text_encoder/weights-00011.safetensors",
241
+ "bytes": 207271944,
242
+ "sha256": "260fabe706ff30aacc9348299a6fceaee57af24cfc88ed40a8c412481b639a2b"
243
+ },
244
+ {
245
+ "file": "text_encoder/weights-00012.safetensors",
246
+ "bytes": 205035120,
247
+ "sha256": "b9ced7666665bedd825cef9d37608332dea80c5c89367b3d455c6ed84d3c1987"
248
+ },
249
+ {
250
+ "file": "text_encoder/weights-00013.safetensors",
251
+ "bytes": 75770384,
252
+ "sha256": "1186899042135f046857ee1c31bbefdc0fbaf8fe8a33d01581b49fc3a1800e35"
253
+ },
254
+ {
255
+ "file": "text_encoder/weights-00014.safetensors",
256
+ "bytes": 209498384,
257
+ "sha256": "ef889195f6e3ecd025b7055afdfc5673969ac2e22c159eff57384e8e86a2a5f0"
258
+ },
259
+ {
260
+ "file": "text_encoder/weights-00015.safetensors",
261
+ "bytes": 205035152,
262
+ "sha256": "152bfd694e16d215d314d86e61914905b3e4cf20ee896de94ea0b6fbaa44494f"
263
+ },
264
+ {
265
+ "file": "text_encoder/weights-00016.safetensors",
266
+ "bytes": 205035152,
267
+ "sha256": "469988778630cf75282d04d1654e724d1fe5dd4391382db52c494d9c4b35a29f"
268
+ },
269
+ {
270
+ "file": "text_encoder/weights-00017.safetensors",
271
+ "bytes": 205035152,
272
+ "sha256": "ae931d67cd4e4dcc8534170e49ae0312b9d00ba76f05ec82e26516b1cec4134f"
273
+ },
274
+ {
275
+ "file": "text_encoder/weights-00018.safetensors",
276
+ "bytes": 205035152,
277
+ "sha256": "c7b0cd6cb16d30b9f0a2282a2e165aa92d349abd1443413ba06098cdf7210971"
278
+ },
279
+ {
280
+ "file": "text_encoder/weights-00019.safetensors",
281
+ "bytes": 205035152,
282
+ "sha256": "c83194f470530b85aaba2b5ed0d4ad011f431390dad9fe707c6e2cb9675eee5d"
283
+ },
284
+ {
285
+ "file": "text_encoder/weights-00020.safetensors",
286
+ "bytes": 71315480,
287
+ "sha256": "4a5648e9be5ff84589f90c47cde78285afe64cf14d2da596f87d6558b34deef4"
288
+ },
289
+ {
290
+ "file": "text_encoder/weights-00021.safetensors",
291
+ "bytes": 330613104,
292
+ "sha256": "184e49178bc1843c01b51d758385b5b45d777c3d0e0545bb1bdf7fa9cef3f33d"
293
+ },
294
+ {
295
+ "file": "text_encoder/weights-00022.safetensors",
296
+ "bytes": 209498384,
297
+ "sha256": "d513a74d1e4f3fcf9b89a0cd943a9170dc92e85a0fe81241b3def694b4231e69"
298
+ },
299
+ {
300
+ "file": "text_encoder/weights-00023.safetensors",
301
+ "bytes": 178296192,
302
+ "sha256": "9e3cc9224d17de2ce559ecddd91b2121a1d3e5d371878e89b2df6e2f190906a2"
303
+ },
304
+ {
305
+ "file": "text_encoder/weights.index.json",
306
+ "bytes": 96578,
307
+ "sha256": "52e387de3cb161bb3c49bfa9adfafbecad4ed4b65332b67c517a99f9c80f8247"
308
+ },
309
+ {
310
+ "file": "tools/check_isolation.py",
311
+ "bytes": 2472,
312
+ "sha256": "04764c713242be5ab6993f3b3b396822e62607fb4f84bd7027c4a2079c307049"
313
+ },
314
+ {
315
+ "file": "tools/original-source-manifest.json",
316
+ "bytes": 1913,
317
+ "sha256": "58cc9c4da7cde76a032bcad24b37b3b34d8b4b3715f820e8b7212a857d29cc71"
318
+ },
319
+ {
320
+ "file": "tools/prepare_bf16.py",
321
+ "bytes": 9184,
322
+ "sha256": "cd65a5ef4783be2d0670d49285e4aec244d075bf36da0bcbfe4439404ffe5e93"
323
+ },
324
+ {
325
+ "file": "tools/quantize.py",
326
+ "bytes": 14092,
327
+ "sha256": "a58b12a6dfb4de843146d85643d193d0f013685dc14716ec67955d00ab31ea8a"
328
+ },
329
+ {
330
+ "file": "tools/verify_package.py",
331
+ "bytes": 1087,
332
+ "sha256": "926de4608bde9515b5ef30486a2c16f6ac2d8fd7bac367bbf3bd6e25ab4785ce"
333
+ },
334
+ {
335
+ "file": "transformer/config.json",
336
+ "bytes": 370,
337
+ "sha256": "56ae3281c4e6c2d1aa3658252d187488071815fd79bef15808bb0205fc1a2241"
338
+ },
339
+ {
340
+ "file": "transformer/weights-00001.safetensors",
341
+ "bytes": 204473176,
342
+ "sha256": "36ddaae0bed6537ec88e046c6e718307cc76538c70438c0e870078d6d75d0b31"
343
+ },
344
+ {
345
+ "file": "transformer/weights-00002.safetensors",
346
+ "bytes": 205001288,
347
+ "sha256": "e6022b43d61f90ddca5e2d2839cd295527c03d60a24f35fc47268f54acfd63ee"
348
+ },
349
+ {
350
+ "file": "transformer/weights-00003.safetensors",
351
+ "bytes": 205001320,
352
+ "sha256": "154146d6613ed7d4a1d4d71e745ccbd9a0ebbf41b2ccc5c18719c9548b865749"
353
+ },
354
+ {
355
+ "file": "transformer/weights-00004.safetensors",
356
+ "bytes": 205001312,
357
+ "sha256": "3c1705769154f6d17a102cb0a6247375084edb86be66342e983576a1bb6aa95c"
358
+ },
359
+ {
360
+ "file": "transformer/weights-00005.safetensors",
361
+ "bytes": 205000864,
362
+ "sha256": "f647ff6a19319084f412447eaa36629683a4a7a0559062d930a5411accc39a01"
363
+ },
364
+ {
365
+ "file": "transformer/weights-00006.safetensors",
366
+ "bytes": 222826408,
367
+ "sha256": "5f90211ff00349c1ba5174f7354d14ceaa730ff32e38cf3e8d66b549d6f7f515"
368
+ },
369
+ {
370
+ "file": "transformer/weights-00007.safetensors",
371
+ "bytes": 205001320,
372
+ "sha256": "0553e76631c4e011f0f2917fd9e78225ad8eaaf727e2ea8db741bc831eab2f8c"
373
+ },
374
+ {
375
+ "file": "transformer/weights-00008.safetensors",
376
+ "bytes": 205001312,
377
+ "sha256": "32a3febb9d4c2cc15352078bf3b912fc81549376cfc38b9c9bb4291a45afbbf5"
378
+ },
379
+ {
380
+ "file": "transformer/weights-00009.safetensors",
381
+ "bytes": 205001304,
382
+ "sha256": "8b8c326b4fdbbb12ac879cf0e7ccaf6063ea872b6ae70b180e10b5a9051867de"
383
+ },
384
+ {
385
+ "file": "transformer/weights-00010.safetensors",
386
+ "bytes": 205000864,
387
+ "sha256": "6464aaacd54beec15169aa4869e5c1f6b74589f6e402ebe28345ae3e9d49a90c"
388
+ },
389
+ {
390
+ "file": "transformer/weights-00011.safetensors",
391
+ "bytes": 222826408,
392
+ "sha256": "878829a50db13f7155178d55f7f0ac000e0e5be437c604c9a9b2476705a46e32"
393
+ },
394
+ {
395
+ "file": "transformer/weights-00012.safetensors",
396
+ "bytes": 205001320,
397
+ "sha256": "c5f8409cbc21760a02a2530fa5ef18781c6cf1382ed1da378b1ef0f19ff60abe"
398
+ },
399
+ {
400
+ "file": "transformer/weights-00013.safetensors",
401
+ "bytes": 205001328,
402
+ "sha256": "58f4c2e56367921cce13e9a0ba9e4d869601e79609eb37f764b3b5acd9496732"
403
+ },
404
+ {
405
+ "file": "transformer/weights-00014.safetensors",
406
+ "bytes": 205001296,
407
+ "sha256": "ff906d4aa0322b4b58a503f091fb97d6e5d4dc356b84b0497c0a49570f40d701"
408
+ },
409
+ {
410
+ "file": "transformer/weights-00015.safetensors",
411
+ "bytes": 205000856,
412
+ "sha256": "29cea08aa74c9b8ef2c274ca5c0980dc6fae58a2787122749763aa715fbfb326"
413
+ },
414
+ {
415
+ "file": "transformer/weights-00016.safetensors",
416
+ "bytes": 222826392,
417
+ "sha256": "5c0f611079cdd03233fe35cf6d709763df8944b24e48f6011ff43fee0b9b0918"
418
+ },
419
+ {
420
+ "file": "transformer/weights-00017.safetensors",
421
+ "bytes": 205001288,
422
+ "sha256": "44449b2e3fad2175d17a7165307a645d46af2f4096d48f517c10deb1585466de"
423
+ },
424
+ {
425
+ "file": "transformer/weights-00018.safetensors",
426
+ "bytes": 205001296,
427
+ "sha256": "a08d51a0f37a7c500474880a934d0f3d1bd764326b16a68db06839dbab045f9b"
428
+ },
429
+ {
430
+ "file": "transformer/weights-00019.safetensors",
431
+ "bytes": 202902600,
432
+ "sha256": "67ea9aef20743c34a4f86579b79967fdf453d37709b0ffb6d7981190437c0cdb"
433
+ },
434
+ {
435
+ "file": "transformer/weights-00020.safetensors",
436
+ "bytes": 33563056,
437
+ "sha256": "8c085dafd9ae1345fefe11996b88f029992e79f47fdc09ea8c0554a161f3fa9f"
438
+ },
439
+ {
440
+ "file": "transformer/weights.index.json",
441
+ "bytes": 41507,
442
+ "sha256": "146e1a34bb9b15a74ad72e43ba2550fe31787cce53467e0b023f036f0b8ccf1f"
443
+ },
444
+ {
445
+ "file": "vae/config.json",
446
+ "bytes": 2079,
447
+ "sha256": "9785d527b278cb8b210e9f48a8028d92a4190968ce7e24c8fc85d9d1b82f6ba2"
448
+ },
449
+ {
450
+ "file": "vae/weights-00001.safetensors",
451
+ "bytes": 203107424,
452
+ "sha256": "1043a8bb881d751f95b427f9048bb290d8a2e22f0f4f122a5c0b35d7e820d125"
453
+ },
454
+ {
455
+ "file": "vae/weights-00002.safetensors",
456
+ "bytes": 220346496,
457
+ "sha256": "b491b4a0b7322e1e0efa0b4ad6249858583096986dd5c72371584b8c9d925fff"
458
+ },
459
+ {
460
+ "file": "vae/weights-00003.safetensors",
461
+ "bytes": 204800464,
462
+ "sha256": "3e7be3114f62aa557260dc7ddf5825f9fb28c7d8b86b12b774599840da0cf32e"
463
+ },
464
+ {
465
+ "file": "vae/weights-00004.safetensors",
466
+ "bytes": 47254608,
467
+ "sha256": "3f3fc4a4ad9b176b1905cb9e3c4bd37ce98d177f1b8caa561d7a135a0130f690"
468
+ },
469
+ {
470
+ "file": "vae/weights.index.json",
471
+ "bytes": 18726,
472
+ "sha256": "b1153ff6959e47d36954b1af174bfce909401459cf51756d624b0bf53cad3726"
473
+ }
474
+ ]
475
+ }
requirements-mi355.lock.txt ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Exact tested dependency closure. Install the matching ROCm Torch stack first.
2
+ # Upstream Torch may declare auxiliary packages; this adapter uses eager BF16 operations.
3
+ accelerate==1.15.0
4
+ annotated-doc==0.0.5
5
+ anyio==4.15.1
6
+ certifi==2026.7.22
7
+ charset-normalizer==3.5.1
8
+ click==8.5.0
9
+ diffusers @ https://github.com/huggingface/diffusers/archive/7263f3317f6b392d62f41e9d75ed9d7e21fc5a5c.tar.gz
10
+ filelock==3.32.3
11
+ fsspec==2026.6.0
12
+ h11==0.16.0
13
+ hf-xet==1.6.0
14
+ httpcore==1.0.9
15
+ httpx==0.28.1
16
+ huggingface-hub==1.31.0
17
+ idna==3.20
18
+ importlib-metadata==9.0.1
19
+ jinja2==3.1.6
20
+ markdown-it-py==4.2.0
21
+ markupsafe==3.0.3
22
+ mdurl==0.1.2
23
+ mpmath==1.3.0
24
+ networkx==3.6.1
25
+ numpy==2.5.2
26
+ packaging==26.3
27
+ pillow==12.3.0
28
+ psutil==7.2.2
29
+ pygments==2.21.0
30
+ pyyaml==6.0.3
31
+ regex==2026.9.10
32
+ requests==2.34.2
33
+ rich==15.0.0
34
+ safetensors==0.8.0
35
+ setuptools==78.1.0
36
+ shellingham==1.5.4
37
+ sympy==1.14.0
38
+ tokenizers==0.23.2
39
+ torch==2.10.0+rocm7.1
40
+ torchvision==0.25.0+rocm7.1
41
+ tqdm==4.70.1
42
+ transformers==5.17.0
43
+ triton-rocm==3.6.0
44
+ typer==0.27.2
45
+ typing-extensions==4.16.0
46
+ urllib3==2.8.0
47
+ zipp==4.1.0
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Use the separately pinned ROCm Torch environment. This file does not replace Torch.
2
+ diffusers @ git+https://github.com/huggingface/diffusers.git@7263f3317f6b392d62f41e9d75ed9d7e21fc5a5c
3
+ transformers==5.17.0
4
+ accelerate==1.15.0
5
+ safetensors==0.8.0
6
+ Pillow==12.3.0
7
+ numpy==2.5.2
result.json ADDED
The diff for this file is too large to render. See raw diff
 
scheduler/scheduler_config.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_class_name": "FlowMatchEulerDiscreteScheduler",
3
+ "_diffusers_version": "0.37.0.dev0",
4
+ "base_image_seq_len": 256,
5
+ "base_shift": 0.5,
6
+ "invert_sigmas": false,
7
+ "max_image_seq_len": 8192,
8
+ "max_shift": 0.9,
9
+ "num_train_timesteps": 1000,
10
+ "shift": 1.0,
11
+ "shift_terminal": 0.02,
12
+ "stochastic_sampling": false,
13
+ "time_shift_type": "exponential",
14
+ "use_beta_sigmas": false,
15
+ "use_dynamic_shifting": true,
16
+ "use_exponential_sigmas": false,
17
+ "use_karras_sigmas": false
18
+ }
tests/test_decoder_selection.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Architecture routing and artifact-integrity checks; no framework or GPU."""
2
+ import hashlib
3
+ import json
4
+ from pathlib import Path
5
+ import tempfile
6
+ import unittest
7
+ from qwen_image21.decoder import select_decoder
8
+
9
+
10
+ class DecoderSelection(unittest.TestCase):
11
+ def fixture(self,root):
12
+ data=b'allowlisted library bytes';(root/'decoder.so').write_bytes(data)
13
+ (root/'manifest.json').write_text(json.dumps(dict(file='decoder.so',architecture='gfx1201',abi_version=1,sha256=hashlib.sha256(data).hexdigest())))
14
+
15
+ def test_mi355_auto_does_not_need_or_load_rdna4_artifact(self):
16
+ path,reason=select_decoder('gfx950:sramecc+:xnack-','auto','/does/not/exist')
17
+ self.assertIsNone(path);self.assertIn('gfx950',reason)
18
+
19
+ def test_explicit_native_rejects_other_architecture(self):
20
+ with self.assertRaisesRegex(ValueError,'gfx1201 only'):
21
+ select_decoder('gfx950','native','/does/not/exist')
22
+
23
+ def test_rdna4_auto_verifies_artifact_and_detects_corruption(self):
24
+ with tempfile.TemporaryDirectory() as tmp:
25
+ root=Path(tmp);self.fixture(root)
26
+ path,_=select_decoder('gfx1201','auto',root);self.assertEqual(path,root/'decoder.so')
27
+ (root/'decoder.so').write_bytes(b'corrupt')
28
+ with self.assertRaisesRegex(ValueError,'SHA-256 mismatch'):
29
+ select_decoder('gfx1201','auto',root)
30
+
31
+ def test_framework_override_does_not_require_native_library(self):
32
+ self.assertIsNone(select_decoder('gfx1201','framework','/does/not/exist')[0])
text_encoder/config.json ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Qwen3VLForConditionalGeneration"
4
+ ],
5
+ "dtype": "bfloat16",
6
+ "image_token_id": 151655,
7
+ "model_type": "qwen3_vl",
8
+ "text_config": {
9
+ "attention_bias": false,
10
+ "attention_dropout": 0.0,
11
+ "bos_token_id": 151643,
12
+ "dtype": "bfloat16",
13
+ "eos_token_id": 151645,
14
+ "head_dim": 128,
15
+ "hidden_act": "silu",
16
+ "hidden_size": 4096,
17
+ "initializer_range": 0.02,
18
+ "intermediate_size": 12288,
19
+ "max_position_embeddings": 262144,
20
+ "model_type": "qwen3_vl_text",
21
+ "num_attention_heads": 32,
22
+ "num_hidden_layers": 36,
23
+ "num_key_value_heads": 8,
24
+ "rms_norm_eps": 1e-06,
25
+ "rope_scaling": {
26
+ "mrope_interleaved": true,
27
+ "mrope_section": [
28
+ 24,
29
+ 20,
30
+ 20
31
+ ],
32
+ "rope_type": "default"
33
+ },
34
+ "rope_theta": 5000000,
35
+ "use_cache": true,
36
+ "vocab_size": 151936
37
+ },
38
+ "tie_word_embeddings": false,
39
+ "transformers_version": "4.57.1",
40
+ "video_token_id": 151656,
41
+ "vision_config": {
42
+ "deepstack_visual_indexes": [
43
+ 8,
44
+ 16,
45
+ 24
46
+ ],
47
+ "depth": 27,
48
+ "dtype": "bfloat16",
49
+ "hidden_act": "gelu_pytorch_tanh",
50
+ "hidden_size": 1152,
51
+ "in_channels": 3,
52
+ "initializer_range": 0.02,
53
+ "intermediate_size": 4304,
54
+ "model_type": "qwen3_vl",
55
+ "num_heads": 16,
56
+ "num_position_embeddings": 2304,
57
+ "out_hidden_size": 4096,
58
+ "patch_size": 16,
59
+ "spatial_merge_size": 2,
60
+ "temporal_patch_size": 2
61
+ },
62
+ "vision_end_token_id": 151653,
63
+ "vision_start_token_id": 151652
64
+ }
text_encoder/weights-00001.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f4da6dc292c0a961d74a02dd076d24aee3f38289c7f250c8727d298a86cf0d80
3
+ size 330613160
text_encoder/weights-00002.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6683ed125cbeb40d6a00216f64e549d1ce36a766f972c57c8c5686550f26f7d3
3
+ size 202806640
text_encoder/weights-00003.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2df7f765d32ef69481f97034f21d344ac9c251fc6a7dbcdcc016e2c4e6b0f5ac
3
+ size 205035120
text_encoder/weights-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bbe642ee7e8e3370f9a0445ba5207bfebee202ea25676e7232d1e44038de3c5c
3
+ size 205035120
text_encoder/weights-00005.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c42fca1cc6c1a8ee0e92b0a840faf95e91f8d0852d79d2d81c29869f7cea3a7b
3
+ size 202756768
text_encoder/weights-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:17df5a53455f78da82104741e906359a5b4eabf697fc4a9294b0891874e9c9c7
3
+ size 182434800
text_encoder/weights-00007.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:309c016ee140abadb50393412c2fd2c2c1d895edfa52ee15bffffbd92d5b5963
3
+ size 202806672
text_encoder/weights-00008.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0463a92fa87a14f70b70019c544e92741e63061b4120a0bb219e5cf219d415c3
3
+ size 205035152
text_encoder/weights-00009.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:14d947a8fa186cae770ea124dffd752b6bfd3a36b3ebd87d904699832c258189
3
+ size 205035152
text_encoder/weights-00010.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1b0fb642ff474d93d8fe0a4f0d99d577b4ac4311a4c84cde0a88b16c94b3379a
3
+ size 205035152
text_encoder/weights-00011.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:260fabe706ff30aacc9348299a6fceaee57af24cfc88ed40a8c412481b639a2b
3
+ size 207271944
text_encoder/weights-00012.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b9ced7666665bedd825cef9d37608332dea80c5c89367b3d455c6ed84d3c1987
3
+ size 205035120