Skip to content

Commit 0da16df

Browse files
lucylqfacebook-github-bot
authored andcommitted
Update module/test .pte file
Summary: - Update module .pte file to not use constant_buffer (which is deprecated moving forwards). - Use add model, generated from toy_model AddModule (previously was average, no nn.Module definition). Add repro instructions for the .pte file. Differential Revision: D62260916
1 parent 10288a2 commit 0da16df

File tree

4 files changed

+61
-48
lines changed

4 files changed

+61
-48
lines changed

extension/module/test/module_test.cpp

Lines changed: 57 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace torch::executor {
2222
class ModuleTest : public ::testing::Test {
2323
protected:
2424
static void SetUpTestSuite() {
25-
model_path_ = std::getenv("RESOURCES_PATH") + std::string("/model.pte");
25+
model_path_ = std::getenv("RESOURCES_PATH") + std::string("/add.pte");
2626
}
2727

2828
static std::string model_path_;
@@ -95,17 +95,16 @@ TEST_F(ModuleTest, TestMethodMeta) {
9595
const auto meta = module.method_meta("forward");
9696
EXPECT_TRUE(meta.ok());
9797
EXPECT_STREQ(meta->name(), "forward");
98-
EXPECT_EQ(meta->num_inputs(), 1);
98+
EXPECT_EQ(meta->num_inputs(), 2);
9999
EXPECT_EQ(*(meta->input_tag(0)), Tag::Tensor);
100100
EXPECT_EQ(meta->num_outputs(), 1);
101101
EXPECT_EQ(*(meta->output_tag(0)), Tag::Tensor);
102102

103103
const auto input_meta = meta->input_tensor_meta(0);
104104
EXPECT_TRUE(input_meta.ok());
105105
EXPECT_EQ(input_meta->scalar_type(), ScalarType::Float);
106-
EXPECT_EQ(input_meta->sizes().size(), 2);
106+
EXPECT_EQ(input_meta->sizes().size(), 1);
107107
EXPECT_EQ(input_meta->sizes()[0], 1);
108-
EXPECT_EQ(input_meta->sizes()[1], 2);
109108

110109
const auto output_meta = meta->output_tensor_meta(0);
111110
EXPECT_TRUE(output_meta.ok());
@@ -124,19 +123,22 @@ TEST_F(ModuleTest, TestNonExistentMethodMeta) {
124123
TEST_F(ModuleTest, TestExecute) {
125124
Module module(model_path_);
126125

127-
std::array<float, 2> input{1, 2};
128-
std::array<int32_t, 2> sizes{1, 2};
126+
std::array<float, 1> input{1};
127+
std::array<int32_t, 1> sizes{1};
129128
TensorImpl tensor(
130129
ScalarType::Float, sizes.size(), sizes.data(), input.data());
131130

132-
const auto result = module.execute("forward", Tensor(&tensor));
131+
const auto result =
132+
module.execute("forward", {Tensor(&tensor), Tensor(&tensor)});
133+
EXPECT_TRUE(result.ok());
134+
133135
EXPECT_TRUE(result.ok());
134136
EXPECT_TRUE(module.is_loaded());
135137
EXPECT_TRUE(module.is_method_loaded("forward"));
136138

137139
const auto data = result->at(0).toTensor().const_data_ptr<float>();
138140

139-
EXPECT_NEAR(data[0], 1.5, 1e-5);
141+
EXPECT_NEAR(data[0], 2, 1e-5);
140142
}
141143

142144
TEST_F(ModuleTest, TestExecutePreload) {
@@ -145,17 +147,18 @@ TEST_F(ModuleTest, TestExecutePreload) {
145147
const auto error = module.load();
146148
EXPECT_EQ(error, Error::Ok);
147149

148-
std::array<float, 2> input{1, 2};
149-
std::array<int32_t, 2> sizes{1, 2};
150+
std::array<float, 1> input{1};
151+
std::array<int32_t, 1> sizes{1};
150152
TensorImpl tensor(
151153
ScalarType::Float, sizes.size(), sizes.data(), input.data());
152154

153-
const auto result = module.execute("forward", Tensor(&tensor));
155+
const auto result =
156+
module.execute("forward", {Tensor(&tensor), Tensor(&tensor)});
154157
EXPECT_TRUE(result.ok());
155158

156159
const auto data = result->at(0).toTensor().const_data_ptr<float>();
157160

158-
EXPECT_NEAR(data[0], 1.5, 1e-5);
161+
EXPECT_NEAR(data[0], 2, 1e-5);
159162
}
160163

161164
TEST_F(ModuleTest, TestExecutePreload_method) {
@@ -164,17 +167,18 @@ TEST_F(ModuleTest, TestExecutePreload_method) {
164167
const auto error = module.load_method("forward");
165168
EXPECT_EQ(error, Error::Ok);
166169

167-
std::array<float, 2> input{1, 2};
168-
std::array<int32_t, 2> sizes{1, 2};
170+
std::array<float, 1> input{1};
171+
std::array<int32_t, 1> sizes{1};
169172
TensorImpl tensor(
170173
ScalarType::Float, sizes.size(), sizes.data(), input.data());
171174

172-
const auto result = module.execute("forward", Tensor(&tensor));
175+
const auto result =
176+
module.execute("forward", {Tensor(&tensor), Tensor(&tensor)});
173177
EXPECT_TRUE(result.ok());
174178

175179
const auto data = result->at(0).toTensor().const_data_ptr<float>();
176180

177-
EXPECT_NEAR(data[0], 1.5, 1e-5);
181+
EXPECT_NEAR(data[0], 2, 1e-5);
178182
}
179183

180184
TEST_F(ModuleTest, TestExecutePreloadProgramAndMethod) {
@@ -186,17 +190,18 @@ TEST_F(ModuleTest, TestExecutePreloadProgramAndMethod) {
186190
const auto load_method_error = module.load_method("forward");
187191
EXPECT_EQ(load_method_error, Error::Ok);
188192

189-
std::array<float, 2> input{1, 2};
190-
std::array<int32_t, 2> sizes{1, 2};
193+
std::array<float, 1> input{1};
194+
std::array<int32_t, 1> sizes{1};
191195
TensorImpl tensor(
192196
ScalarType::Float, sizes.size(), sizes.data(), input.data());
193197

194-
const auto result = module.execute("forward", Tensor(&tensor));
198+
const auto result =
199+
module.execute("forward", {Tensor(&tensor), Tensor(&tensor)});
195200
EXPECT_TRUE(result.ok());
196201

197202
const auto data = result->at(0).toTensor().const_data_ptr<float>();
198203

199-
EXPECT_NEAR(data[0], 1.5, 1e-5);
204+
EXPECT_NEAR(data[0], 2, 1e-5);
200205
}
201206

202207
TEST_F(ModuleTest, TestExecuteOnNonExistent) {
@@ -218,41 +223,42 @@ TEST_F(ModuleTest, TestExecuteOnCurrupted) {
218223
TEST_F(ModuleTest, TestGet) {
219224
Module module(model_path_);
220225

221-
std::array<float, 2> input{1, 2};
222-
std::array<int32_t, 2> sizes{1, 2};
226+
std::array<float, 1> input{1};
227+
std::array<int32_t, 1> sizes{1};
223228
TensorImpl tensor(
224229
ScalarType::Float, sizes.size(), sizes.data(), input.data());
225230

226-
const auto result = module.get("forward", Tensor(&tensor));
231+
const auto result = module.get("forward", {Tensor(&tensor), Tensor(&tensor)});
227232

228233
EXPECT_TRUE(result.ok());
229234
const auto data = result->toTensor().const_data_ptr<float>();
230-
EXPECT_NEAR(data[0], 1.5, 1e-5);
235+
EXPECT_NEAR(data[0], 2, 1e-5);
231236
}
232237

233238
TEST_F(ModuleTest, TestForward) {
234239
auto module = std::make_unique<Module>(model_path_);
235240

236-
std::array<float, 2> input{1, 2};
237-
std::array<int32_t, 2> sizes{1, 2};
241+
std::array<float, 1> input{1};
242+
std::array<int32_t, 1> sizes{1};
238243
TensorImpl tensor(
239244
ScalarType::Float, sizes.size(), sizes.data(), input.data());
240-
const auto result = module->forward(Tensor(&tensor));
245+
246+
const auto result = module->forward({Tensor(&tensor), Tensor(&tensor)});
241247
EXPECT_TRUE(result.ok());
242248

243249
const auto data = result->at(0).toTensor().const_data_ptr<float>();
244250

245-
EXPECT_NEAR(data[0], 1.5, 1e-5);
251+
EXPECT_NEAR(data[0], 2, 1e-5);
246252

247253
std::array<float, 2> input2{2, 3};
248254
TensorImpl tensor2(
249255
ScalarType::Float, sizes.size(), sizes.data(), input2.data());
250-
const auto result2 = module->forward(Tensor(&tensor2));
256+
const auto result2 = module->forward({Tensor(&tensor2), Tensor(&tensor2)});
251257
EXPECT_TRUE(result2.ok());
252258

253259
const auto data2 = result->at(0).toTensor().const_data_ptr<float>();
254260

255-
EXPECT_NEAR(data2[0], 2.5, 1e-5);
261+
EXPECT_NEAR(data2[0], 4, 1e-5);
256262
}
257263

258264
TEST_F(ModuleTest, TestForwardWithInvalidInputs) {
@@ -303,23 +309,26 @@ TEST_F(ModuleTest, TestProgramSharingAndDataLoaderManagement) {
303309
EXPECT_EQ(load_error, Error::Ok);
304310
EXPECT_TRUE(module1->is_loaded());
305311

306-
std::array<float, 2> input{1, 2};
307-
std::array<int32_t, 2> sizes{1, 2};
312+
std::array<float, 1> input{1};
313+
std::array<int32_t, 1> sizes{1};
308314
TensorImpl tensor(
309315
ScalarType::Float, sizes.size(), sizes.data(), input.data());
310316

311-
auto result1 = module1->execute("forward", Tensor(&tensor));
317+
auto result1 =
318+
module1->execute("forward", {Tensor(&tensor), Tensor(&tensor)});
312319
EXPECT_TRUE(result1.ok());
313320

314321
auto module2 = std::make_unique<Module>(module1->program());
315322

316-
auto result2 = module2->execute("forward", Tensor(&tensor));
323+
auto result2 =
324+
module2->execute("forward", {Tensor(&tensor), Tensor(&tensor)});
317325
EXPECT_TRUE(result2.ok());
318326

319327
module1 = std::make_unique<Module>("/path/to/nonexistent/file.pte");
320328
EXPECT_FALSE(module1->is_loaded());
321329

322-
auto result3 = module2->execute("forward", Tensor(&tensor));
330+
auto result3 =
331+
module2->execute("forward", {Tensor(&tensor), Tensor(&tensor)});
323332
EXPECT_TRUE(result3.ok());
324333
}
325334

@@ -351,17 +360,17 @@ TEST_F(ModuleTest, TestProgramPersistenceAndReuseAfterModuleDestruction) {
351360

352361
EXPECT_EQ(module.program(), shared_program);
353362

354-
std::array<float, 2> input{1, 2};
355-
std::array<int32_t, 2> sizes{1, 2};
363+
std::array<float, 1> input{1};
364+
std::array<int32_t, 1> sizes{1};
356365
TensorImpl tensor(
357366
ScalarType::Float, sizes.size(), sizes.data(), input.data());
358367

359-
auto result = module.execute("forward", Tensor(&tensor));
368+
auto result = module.execute("forward", {Tensor(&tensor), Tensor(&tensor)});
360369
EXPECT_TRUE(result.ok());
361370

362371
auto data = result->at(0).toTensor().const_data_ptr<float>();
363372

364-
EXPECT_NEAR(data[0], 1.5, 1e-5);
373+
EXPECT_NEAR(data[0], 2, 1e-5);
365374
}
366375

367376
TEST_F(ModuleTest, TestConcurrentExecutionWithSharedProgram) {
@@ -379,24 +388,24 @@ TEST_F(ModuleTest, TestConcurrentExecutionWithSharedProgram) {
379388
EXPECT_TRUE(program != nullptr);
380389

381390
auto thread = [](std::shared_ptr<Program> program,
382-
const std::array<float, 2>& input) {
391+
const std::array<float, 1>& input) {
383392
Module module(program);
384-
std::array<int32_t, 2> sizes{1, 2};
393+
std::array<int32_t, 1> sizes{1};
385394
TensorImpl tensor(
386395
ScalarType::Float, sizes.size(), sizes.data(), (void*)input.data());
387396

388-
const auto result = module.forward(Tensor(&tensor));
397+
const auto result = module.forward({Tensor(&tensor), Tensor(&tensor)});
389398
EXPECT_TRUE(result.ok());
390399

391400
const auto data = result->at(0).toTensor().const_data_ptr<float>();
392-
EXPECT_NEAR(data[0], (input[0] + input[1]) / 2.0, 1e-5);
401+
EXPECT_NEAR(data[0], (input[0] * 2), 1e-5);
393402
};
394403

395-
std::thread t1(thread, program, std::array<float, 2>{1, 2});
396-
std::thread t2(thread, program, std::array<float, 2>{2, 3});
397-
std::thread t3(thread, program, std::array<float, 2>{3, 4});
398-
std::thread t4(thread, program, std::array<float, 2>{4, 5});
399-
std::thread t5(thread, program, std::array<float, 2>{5, 6});
404+
std::thread t1(thread, program, std::array<float, 1>{1});
405+
std::thread t2(thread, program, std::array<float, 1>{2});
406+
std::thread t3(thread, program, std::array<float, 1>{3});
407+
std::thread t4(thread, program, std::array<float, 1>{4});
408+
std::thread t5(thread, program, std::array<float, 1>{5});
400409

401410
t1.join();
402411
t2.join();
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## Resources
2+
3+
### model.pte
4+
- generated via `buck2 run fbcode//executorch/examples/portable/scripts:export -- --model_name="add"` after D62209852.
728 Bytes
Binary file not shown.
-1.56 KB
Binary file not shown.

0 commit comments

Comments
 (0)