mirror of
				https://github.com/ml-explore/mlx.git
				synced 2025-11-04 10:38:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
.. _saving_and_loading:
 | 
						|
 | 
						|
Saving and Loading Arrays
 | 
						|
=========================
 | 
						|
 | 
						|
.. currentmodule:: mlx.core
 | 
						|
 | 
						|
MLX supports multiple array serialization formats.
 | 
						|
 | 
						|
.. list-table:: Serialization Formats
 | 
						|
   :widths: 20 8 25 25
 | 
						|
   :header-rows: 1
 | 
						|
 | 
						|
   * - Format
 | 
						|
     - Extension
 | 
						|
     - Function
 | 
						|
     - Notes
 | 
						|
   * - NumPy
 | 
						|
     - ``.npy``
 | 
						|
     - :func:`save`
 | 
						|
     - Single arrays only
 | 
						|
   * - NumPy archive
 | 
						|
     - ``.npz``
 | 
						|
     - :func:`savez` and :func:`savez_compressed`
 | 
						|
     - Multiple arrays
 | 
						|
   * - Safetensors
 | 
						|
     - ``.safetensors``
 | 
						|
     - :func:`save_safetensors`
 | 
						|
     - Multiple arrays
 | 
						|
   * - GGUF
 | 
						|
     - ``.gguf``
 | 
						|
     - :func:`save_gguf`
 | 
						|
     - Multiple arrays
 | 
						|
 | 
						|
The :func:`load` function will load any of the supported serialization
 | 
						|
formats. It determines the format from the extensions. The output of
 | 
						|
:func:`load` depends on the format.
 | 
						|
 | 
						|
Here's an example of saving a single array to a file:
 | 
						|
 | 
						|
.. code-block:: shell
 | 
						|
 | 
						|
   >>> a = mx.array([1.0])
 | 
						|
   >>> mx.save("array", a)
 | 
						|
 | 
						|
The array ``a`` will be saved in the file ``array.npy`` (notice the extension
 | 
						|
is automatically added). Including the extension is optional; if it is missing
 | 
						|
it will be added. You can load the array with:
 | 
						|
 | 
						|
.. code-block:: shell
 | 
						|
 | 
						|
   >>> mx.load("array.npy")
 | 
						|
   array([1], dtype=float32)
 | 
						|
 | 
						|
Here's an example of saving several arrays to a single file:
 | 
						|
 | 
						|
.. code-block:: shell
 | 
						|
 | 
						|
   >>> a = mx.array([1.0])
 | 
						|
   >>> b = mx.array([2.0])
 | 
						|
   >>> mx.savez("arrays", a, b=b)
 | 
						|
 | 
						|
For compatibility with :func:`numpy.savez` the MLX :func:`savez` takes arrays
 | 
						|
as arguments. If the keywords are missing, then default names will be
 | 
						|
provided. This can be loaded with:
 | 
						|
 | 
						|
.. code-block:: shell
 | 
						|
 | 
						|
   >>> mx.load("arrays.npz")
 | 
						|
   {'b': array([2], dtype=float32), 'arr_0': array([1], dtype=float32)}
 | 
						|
 | 
						|
In this case :func:`load` returns a dictionary of names to arrays.
 | 
						|
 | 
						|
The functions :func:`save_safetensors` and :func:`save_gguf` are similar to
 | 
						|
:func:`savez`, but they take as input a :obj:`dict` of string names to arrays:
 | 
						|
 | 
						|
.. code-block:: shell
 | 
						|
 | 
						|
   >>> a = mx.array([1.0])
 | 
						|
   >>> b = mx.array([2.0])
 | 
						|
   >>> mx.save_safetensors("arrays", {"a": a, "b": b})
 |