USB-to-PCIe adapter?

Hi there, we’re looking to evaluate MemryX against a few other accelerators (like Hailo-8). MemryX looks very promising from the perspective of floating point math, which we want to leverage for regular vision ML as well as 3D point cloud transformations between robot reference frames (packaged as an ONNX model).

We’re starting by trying to use it with a laptop and a USB-to-PCIe adapter. Specifically this SSK unit: Amazon.com

Driver and runtime install looks fine:

lsmod | grep memx
memx_cascade_plus_pcie 98304 0

However, after driver and tooling install, we’re not seeing the device show up in lspci or dmesg -w when plugging it in. A regular NVMe SSD drive does show up, so we know the adapter is functioning. This is on Ubuntu 22.04, Intel laptop.

sudo service mxa-manager status● mxa-manager.service - The MemryX MX3 device management daemon.Loaded: loaded (/lib/systemd/system/mxa-manager.service; enabled; vendor preset: enabled)Active: active (running) since Tue 2025-09-16 10:24:14 PDT; 58min agoProcess: 1123 ExecStartPre=/bin/sleep 2 (code=exited, status=0/SUCCESS)Main PID: 1822 (mxa_manager)Tasks: 4 (limit: 38014)Memory: 2.7MCPU: 224msCGroup: /system.slice/mxa-manager.service└─1822 /usr/bin/mxa_manager
Sep 16 10:24:14 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1824] [info] [CTRL] control listener running on /run/mxa_manager/:10000Sep 16 10:24:14 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1822] [info] Server::start doneSep 16 10:24:14 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1826] [info] [OFMAP] ofmap listener running on /run/mxa_manager/:10002Sep 16 10:24:14 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1825] [info] [IFMAP] ifmap listener running on /run/mxa_manager/:10001Sep 16 10:24:57 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1824] [info] [CTRL] new control connection acceptedSep 16 10:24:57 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 7791] [warning] [CTRL] got INIT_CONNECTION but we don’t have any devices!Sep 16 10:24:57 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 7791] [info] [CTRL] control connection closed for client 1804289383Sep 16 10:26:47 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1824] [info] [CTRL] new control connection acceptedSep 16 10:26:47 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 8426] [warning] [CTRL] got INIT_CONNECTION but we don’t have any devices!Sep 16 10:26:47 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 8426] [info] [CTRL] control connection closed for client 846930886

Do you guys have a known working USB-to-PCIe adapter that you can point us to? Or is this not currently supported?

Hi there!

You’ll have to use a Thunderbolt or USB 4 adapter, so the native PCIe protocol can be passed through to the chip. Many external NVMe enclosures have a storage controller chip on board in order to work with USB 3 and below, such as the one where a drive is showing up when you connect it.

UGREEN has a couple USB4 external enclosures that we’ve tested to work with MX3, namely the ones with a ASM2464PD USB4 chip such as this one and this one.

Note that you’ll have to be sure your computer has either a USB 4.0 or Thunderbolt 3 port in order for this to work.

Let me know if you have any followup questions!

1 Like

Thank you for the suggestions! I bought the UGREEN enclosure and am able to see the device!

For others finding this post, you do need to use a thunderbolt compatible cable. Not all USB cables will work. The linked products do come with such a cable.

Excited to try it out and benchmark our model on the new accelerator. Thank you again for a quick resolution!

Ahh, one other thing. Running mx_bench –hello results in an error:

$ mx_bench --hello
[2025-09-18 20:10:29.215] [error] [Client] No devices in system, please check the server
Traceback (most recent call last):
File “/home/yuri/mx/bin/mx_bench”, line 7, in
sys.exit(main())
File “memryx/runtime/benchmark.py”, line 470, in memryx.runtime.benchmark.main
memryx.errors.MxaError: Failed to connect to mx server

This is with the device detected:

$ cat /sys/memx0/verinfo
pcie intf device:
SDK version: 2.0
kdriver version: 1.2.40
FW_CommitID=0x61e866cf DateCode=0x67c683ee
ManufacturerID=0x600e52e10000009a
Cold+Warm-RebootCnt=1 Warm-RebootCnt=0
BootMode=QSPI Chip= A1

Tried running sudo modprobe -v memx_cascade_plus_pcie, but not quite able to get past the error above

Some additional troubleshooting info:

$ sudo service mxa-manager status

mxa-manager.service - The MemryX MX3 device management daemon.
Loaded: loaded (/lib/systemd/system/mxa-manager.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2025-09-16 10:24:14 PDT; 2 days ago
Process: 1123 ExecStartPre=/bin/sleep 2 (code=exited, status=0/SUCCESS)
Main PID: 1822 (mxa_manager)
Tasks: 4 (limit: 38014)
Memory: 736.0K
CPU: 9.829s
CGroup: /system.slice/mxa-manager.service
└─1822 /usr/bin/mxa_manager

Sep 18 20:09:56 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 126792] [info] [CTRL] control connection closed for client 1649760492
Sep 18 20:10:29 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1824] [info] [CTRL] new control connection accepted
Sep 18 20:10:29 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 126954] [warning] [CTRL] got INIT_CONNECTION but we don’t have any devices!
Sep 18 20:10:29 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 126954] [info] [CTRL] control connection closed for client 596516649
Sep 18 20:12:53 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1824] [info] [CTRL] new control connection accepted
Sep 18 20:12:53 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 127695] [warning] [CTRL] got INIT_CONNECTION but we don’t have any devices!
Sep 18 20:12:53 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 127695] [info] [CTRL] control connection closed for client 1189641421
Sep 18 20:14:17 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 1824] [info] [CTRL] new control connection accepted
Sep 18 20:14:17 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 128018] [warning] [CTRL] got INIT_CONNECTION but we don’t have any devices!
Sep 18 20:14:17 Aigen-TensorBook-2022 mxa_manager[1822]: [thread 128018] [info] [CTRL] control connection closed for client 1025202362

$ sudo lsmod | grep memx
memx_cascade_plus_pcie 98304 0

$ ls /dev/memx*
/dev/memx0 /dev/memx0_feature

$ sudo lspci -vv -d 1fe9:0100
09:00.0 Processing accelerators: Device 1fe9:0100
Subsystem: Device 1fe9:0000
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 17
IOMMU group: 27
Region 0: Memory at 6b000000 (64-bit, non-prefetchable) [size=16M]
Region 2: Memory at 6c000000 (64-bit, non-prefetchable) [size=16M]
Region 4: Memory at 6d000000 (32-bit, non-prefetchable) [size=1M]
Capabilities: [80] Power Management version 3
Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [90] MSI: Enable- Count=1/1 Maskable+ 64bit+
Address: 0000000000000000 Data: 0000
Masking: 00000000 Pending: 00000000
Capabilities: [b0] MSI-X: Enable+ Count=512 Masked-
Vector table: BAR=4 offset=000fe000
PBA: BAR=4 offset=000fdf00
Capabilities: [c0] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <1us, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 0.000W
DevCtl: CorrErr+ NonFatalErr+ FatalErr+ UnsupReq+
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 8GT/s, Width x2, ASPM L0s L1, Exit Latency L0s <256ns, L1 <8us
ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 8GT/s (ok), Width x2 (ok)
TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range B, TimeoutDis+ NROPrPrP- LTR+
10BitTagComp- 10BitTagReq- OBFF Via message, ExtFmt+ EETLPPrefix-
EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
FRS- TPHComp- ExtTPHComp-
AtomicOpsCap: 32bit- 64bit- 128bitCAS-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR+ OBFF Disabled,
AtomicOpsCtl: ReqEn-
LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+ EqualizationPhase1+
EqualizationPhase2+ EqualizationPhase3+ LinkEqualizationRequest-
Retimer- 2Retimers- CrosslinkRes: unsupported
Capabilities: [100 v2] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- AdvNonFatalErr+
AERCap: First Error Pointer: 00, ECRCGenCap+ ECRCGenEn- ECRCChkCap+ ECRCChkEn-
MultHdrRecCap- MultHdrRecEn- TLPPfxPres- HdrLogCap-
HeaderLog: 00000000 00000000 00000000 00000000
Capabilities: [150 v1] Device Serial Number 60-0e-52-e1-00-00-00-9a
Capabilities: [160 v1] Power Budgeting <?>
Capabilities: [1b8 v1] Latency Tolerance Reporting
Max snoop latency: 0ns
Max no snoop latency: 0ns
Capabilities: [300 v1] Secondary PCI Express
LnkCtl3: LnkEquIntrruptEn- PerformEqu-
LaneErrStat: 0
Capabilities: [900 v1] L1 PM Substates
L1SubCap: PCI-PM_L1.2- PCI-PM_L1.1+ ASPM_L1.2- ASPM_L1.1+ L1_PM_Substates+
L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-
L1SubCtl2:
Kernel driver in use: memx_pcie_ai_chip
Kernel modules: memx_cascade_plus_pcie

Nevermind, got it working after sudo service mxa-manager restart

mx_bench --hello
Hello from MXA!

Device ID Chip Count Freq Volt
    0 |          4 |   600 |  750

Hopefully this thread will be helpful for others to set up a local environment for testing. Thanks again for the help!

1 Like

Spoke too soon. Apologies for the spam!

Attempting to reproduce the benchmark from here. All steps complete up to creating the .dfp, but then when I run mx_bench -v -d mobilenet.dfp -f 1000 I am seeing the following message:

╭─────────────────┬─────┬─────┬────────╮
│ │ │ │ │
│ │ ├──── │
│ │ │ ╞══ ══╡ │
│ │ │ │ ├──── │
│ │ │ │ │ │ │
╰─────┴─────┴─────┴─────┴─────┴────────╯

╔══════════════════════════════════════╗
║ Benchmark ║
║ Copyright (c) 2019-2025 MemryX Inc. ║
╚══════════════════════════════════════╝

Driver reqruied firmware anti_rollback cnt >= 6Cur firmware: cnt 5 ver 0x61e866cfError loading DFP, try resetting the boardTraceback (most recent call last):File “/home/yuri/mx/bin/mx_bench”, line 7, in sys.exit(main())File “memryx/runtime/benchmark.py”, line 501, in memryx.runtime.benchmark.mainFile “memryx/utilities/decorators.py”, line 67, in memryx.utilities.decorators.initializer_namespace.wrapperFile “memryx/runtime/benchmark.py”, line 62, in memryx.runtime.benchmark.Benchmark.initFile “memryx/runtime/accl.py”, line 850, in memryx.runtime.accl.SyncAccl.initFile “memryx/runtime/accl.py”, line 220, in memryx.runtime.accl.Accl.initRuntimeError: Init DFP Runner failed!

Noticing in the compiler log an error related to uploading the model:

[09/18/2025 09:02:44 PM][memryx.neural_compiler.nc][INFO] MemryX Neural Compiler log
[09/18/2025 09:02:44 PM][memryx.neural_compiler.nc][INFO] Anonymous user ID: 7e862110950611f082caf5bdc7a480b1
[09/18/2025 09:02:44 PM][memryx.neural_compiler.nc][INFO] SDK version: 2.0.5
[09/18/2025 09:02:44 PM][memryx.neural_compiler.nc][INFO] System info: Linux, 6.8.0-79-generic, x86_64, Python 3.10.12 (main, Aug 15 2025, 14:32:43) [GCC 11.4.0]
[09/18/2025 09:02:44 PM][h5py._conv][DEBUG] Creating converter from 3 to 5
[09/18/2025 09:02:45 PM][absl][WARNING] No training configuration found in the save file, so the model was not compiled. Compile it manually.
[09/18/2025 09:02:45 PM][memryx.neural_compiler.nc][INFO] Model 0 framework: keras3
[09/18/2025 09:02:45 PM][memryx.neural_compiler.nc][INFO] Model 0 parameter count: 4253864
[09/18/2025 09:02:45 PM][memryx.neural_compiler.nc][INFO] Model 0 input shapes: [[1, 224, 224, 3]]
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Activation
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Conv
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Cropping
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Dense
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Input
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Math
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Matrix
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Merge
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Normalization
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Padding
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Pooling
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Reshape
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.Training
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.ops.UpSampling
[09/18/2025 09:02:45 PM][memryx.neural_compiler.graph.extensions][INFO] importing memryx.neural_compiler.graph.framework.keras.subgraphs.Swish
[09/18/2025 09:02:46 PM][memryx.neural_compiler.nc][INFO] Model 0 operator count: 93
[09/18/2025 09:02:46 PM][memryx.neural_compiler.nc][INFO] Model 0 operators: {‘Output’: 1, ‘Reshape’: 2, ‘Softmax’: 1, ‘Conv2D’: 15, ‘NoOp’: 1, ‘ReLU’: 27, ‘BatchNormalization’: 27, ‘DepthwiseConv2D’: 13, ‘ZeroPadding2D’: 4, ‘Input’: 1, ‘AveragePooling2D’: 1}
[09/18/2025 09:02:46 PM][memryx.neural_compiler.mapper.map][INFO] Creating 0 extra process(es) for mapping 1 sweep(s) with effort normal…
[09/18/2025 09:02:48 PM][memryx.neural_compiler.mapper.map][INFO] Sweep index 0 produced best mapping with estimated fps = 4237.0
[09/18/2025 09:02:48 PM][memryx.neural_compiler.mapper.map][INFO] MPU 0 input port 0: {‘model_index’: 0, ‘layer_name’: ‘input_layer’, ‘shape’: [224, 224, 1, 3]}
[09/18/2025 09:02:48 PM][memryx.neural_compiler.mapper.map][INFO] MPU 3 output port 0: {‘model_index’: 0, ‘layer_name’: ‘predictions’, ‘shape’: [1, 1, 1, 1000]}
[09/18/2025 09:02:48 PM][memryx.neural_compiler.nc][INFO] Mapped to 4 chips of gen 3.1
[09/18/2025 09:02:53 PM][memryx.neural_compiler.nc][INFO] Compilation successful
[09/18/2025 09:02:53 PM][urllib3.connectionpool][DEBUG] Starting new HTTP connection (1): ann.mws.memryx.com:42069
[09/18/2025 09:02:53 PM][memryx.neural_compiler.nc][ERROR] HTTPConnectionPool(host=‘ann.mws.memryx.com’, port=42069): Max retries exceeded with url: /upload (Caused by NewConnectionError(‘<urllib3.connection.HTTPConnection object at 0x71d22003f370>: Failed to establish a new connection: [Errno 111] Connection refused’))

Hi there,

Glad to hear the adapter is working! For the rollback error message, t seems the firmware needs to be updated. This can happen if the driver gets installed before connecting the MX3; auto-update firmware during driver install only runs if an MX3 is connected.

Here’s the command to run the update manually:

sudo mxfw_pcie_update_flash -f /lib/firmware/cascade_4chips_flash.bin

After this, please reboot the computer and try again.

The need for sudo service mxa-manager restart may be due to the MX3 not being connected when the service first starts at boot, since it only does a device detection sweep at startup.

Sorry for the issues so far! Thunderbolt/USB4 is .. less tested than internal M.2 slots.

Let me know if these help resolve the issue.

1 Like

Hello, thank you again for the suggestion! Really appreciate the support, and completely understand the USB adapter not being the primary target. We also don’t intend to use it in production, but it is helpful to evaluate how well our existing models will perform on this device.

The firmware update succeeded! It did require a full system reboot to work (did not work without a reboot), but I’ve got the mobilenet benchmark running now:

Ran 1000 frames
Model: 0
Average FPS: 879.20
Average System Latency: 2.57 ms

Thank you again for your help! Hopefully this thread is helpful to others who are looking to evaluate the accelerator using an external enclosure. We’ll be moving on to benchmarking our custom model next :+1:

2 Likes