@@ -207,7 +207,8 @@ extern "C" lean_obj_res ct2_generate(
207207 return reinterpret_cast <lean_obj_res>(output);
208208}
209209
210- extern " C" uint8_t init_ct2_encoder (b_lean_obj_arg model_path, b_lean_obj_arg _device) {
210+ extern " C" uint8_t init_ct2_encoder (b_lean_obj_arg model_path,
211+ b_lean_obj_arg _device) {
211212 const char *dir = lean_string_cstr (model_path);
212213 if (!exists (dir)) {
213214 return false ;
@@ -216,7 +217,7 @@ extern "C" uint8_t init_ct2_encoder(b_lean_obj_arg model_path, b_lean_obj_arg _d
216217 delete p_encoder;
217218 }
218219
219- ctranslate2::Device device =
220+ ctranslate2::Device device =
220221 ctranslate2::str_to_device (lean_string_cstr (_device));
221222
222223 p_encoder = new ctranslate2::Encoder (dir, device);
@@ -257,7 +258,8 @@ extern "C" lean_obj_res ct2_encode(b_lean_obj_arg _input_tokens) {
257258 return arr;
258259}
259260
260- extern " C" uint8_t init_premise_embeddings (b_lean_obj_arg embeddings_path, b_lean_obj_arg _device) {
261+ extern " C" uint8_t init_premise_embeddings (b_lean_obj_arg embeddings_path,
262+ b_lean_obj_arg _device) {
261263 const char *emb_path = lean_string_cstr (embeddings_path);
262264 if (!exists (emb_path)) {
263265 return false ;
@@ -266,9 +268,10 @@ extern "C" uint8_t init_premise_embeddings(b_lean_obj_arg embeddings_path, b_lea
266268 delete premise_embeddings;
267269 }
268270
269- ctranslate2::Device device =
271+ ctranslate2::Device device =
270272 ctranslate2::str_to_device (lean_string_cstr (_device));
271- device = ctranslate2::Device::CPU ; // [TODO]: We should remove this line when everything can work well on CUDA.
273+ device = ctranslate2::Device::CPU ; // [TODO]: We should remove this line when
274+ // everything can work well on CUDA.
272275
273276 auto d = npy::read_npy<double >(emb_path);
274277 std::vector<double > data = d.data ;
@@ -285,8 +288,7 @@ extern "C" uint8_t init_premise_embeddings(b_lean_obj_arg embeddings_path, b_lea
285288 std::transform (shape.begin (), shape.end (), shape_i64.begin (),
286289 [](unsigned long ul) { return static_cast <int64_t >(ul); });
287290
288- premise_embeddings =
289- new ctranslate2::StorageView (shape_i64, data_f, device);
291+ premise_embeddings = new ctranslate2::StorageView (shape_i64, data_f, device);
290292 return true ;
291293}
292294
@@ -321,7 +323,7 @@ extern "C" uint8_t is_premise_dictionary_initialized(lean_object *) {
321323 return is_premise_dictionary_initialized_aux ();
322324}
323325
324- extern " C" lean_obj_res ct2_retrieve (b_lean_obj_arg _encoded_state) {
326+ extern " C" lean_obj_res ct2_retrieve (b_lean_obj_arg _encoded_state) {
325327 const lean_array_object *p_arr = lean_to_array (_encoded_state);
326328
327329 assert (static_cast <int64_t >(p_arr->m_size ) == premise_embeddings->dim (1 ));
@@ -336,8 +338,9 @@ extern "C" lean_obj_res ct2_retrieve(b_lean_obj_arg _encoded_state) {
336338 std::vector<int64_t > state_embedding_shape{
337339 static_cast <int64_t >(p_arr->m_size ), 1 };
338340
339- ctranslate2::StorageView *state_embedding = new ctranslate2::StorageView (
340- state_embedding_shape, state_embedding_data, premise_embeddings->device ());
341+ ctranslate2::StorageView *state_embedding =
342+ new ctranslate2::StorageView (state_embedding_shape, state_embedding_data,
343+ premise_embeddings->device ());
341344
342345 int k = 10 ;
343346 ctranslate2::ops::MatMul matmul (false , false , 1.0 );
@@ -346,31 +349,34 @@ extern "C" lean_obj_res ct2_retrieve(b_lean_obj_arg _encoded_state) {
346349 std::vector<int64_t > probs_shape{premise_embeddings->dim (0 ), 1 };
347350
348351 ctranslate2::StorageView *probs =
349- new ctranslate2::StorageView (probs_shape, ctranslate2::DataType::FLOAT32 , premise_embeddings->device ());\
350-
352+ new ctranslate2::StorageView (probs_shape, ctranslate2::DataType::FLOAT32 ,
353+ premise_embeddings->device ());
354+
351355 matmul (*premise_embeddings, *state_embedding, *probs);
352356 probs->resize ({premise_embeddings->dim (0 )});
353-
354- ctranslate2::StorageView *topk_values =
355- new ctranslate2::StorageView ( {k}, ctranslate2::DataType::FLOAT32 , premise_embeddings->device ());
356- ctranslate2::StorageView *topk_indices =
357- new ctranslate2::StorageView ( {k}, ctranslate2::DataType::INT32 , premise_embeddings->device ());
357+
358+ ctranslate2::StorageView *topk_values = new ctranslate2::StorageView (
359+ {k}, ctranslate2::DataType::FLOAT32 , premise_embeddings->device ());
360+ ctranslate2::StorageView *topk_indices = new ctranslate2::StorageView (
361+ {k}, ctranslate2::DataType::INT32 , premise_embeddings->device ());
358362 topk (*probs, *topk_values, *topk_indices);
359-
363+
360364 lean_array_object *output =
361365 reinterpret_cast <lean_array_object *>(lean_alloc_array (k, k));
362366 int *topk_indices_ptr = topk_indices->data <int >();
363367 float *topk_values_ptr = topk_values->data <float >();
364-
368+
365369 for (int i = 0 ; i < k; i++) {
366- assert (topk_indices_ptr[i] >= 0 && topk_indices_ptr[i] < premise_embeddings->dim (0 ));
367- std::string this_premise =
370+ assert (topk_indices_ptr[i] >= 0 &&
371+ topk_indices_ptr[i] < premise_embeddings->dim (0 ));
372+ // [NOTE]: This is where the server crash occurs on CUDA.
373+ std::string this_premise =
368374 (*premise_dictionary)[std::to_string (*(topk_indices_ptr + i))];
369375
370376 output->m_data [i] =
371377 lean_mk_pair (lean_mk_string (this_premise.c_str ()),
372- lean_box_float (static_cast <double >(topk_values_ptr[i])));
378+ lean_box_float (static_cast <double >(topk_values_ptr[i])));
373379 }
374-
380+
375381 return reinterpret_cast <lean_obj_res>(output);
376382}
0 commit comments